Lua 错误处理方式
本人Java出身,在学习Lua过程中发现其多错误的处理方式较Java有所不同,但想法和结果都是一样的。不管怎样,先在这里记录一下。
发生错误
在Lua中发生错误有三种情况
1. 语法错误,比如
a = b
--~ b未定义
- 运行时错误
b = nil
--~ 这里b没有初始化成功
a = 10 / b
- 手动抛出错误
--~ error函数抛出错误
error('error message',1)
--~ 断言错误
assert(false, 'assert 错误')
错误处理
- pcall
pcall 接受一个“被监控”函数和函数参数,当发生错误时返回false,正常执行后返回true
local run = function(str)
print('befor-->\t' .. str)
error('error in here')
print('after')
end
if pcall(run,'hello') then
print('all right')
else
print('error')
end
输出 “error”
2. xpcall
xpcall接受“被监控”函数,错误处理函数和函数参数,发生错误时将调用错误处理函数,在错误处理函数中可通过debug.traceback()获取错误信息或debug.debug()进入错误检查见面。
local run = function(str)
print('befor-->\t' .. str)
error('error in here')
print('after')
end
local handler = function()
print('error')
local trace = debug.traceback()
print(trace)
local d = debug.debug()
print(d)
end
local result = xpcall(run, handler, 'hello')
print(result)
输出
error
stack traceback:
.\task2.lua:40: in function <.\task2.lua:38>
.\task2.lua:32: in function <.\task2.lua:31>
[C]: in function ‘xpcall’
.\task2.lua:53: in main chunk
[C]: ?