Lua提供了三个异常处理的接口,分别是pcall、xpcall、debug。
pcall
pcall(f, arg1, ···)
函数会调用f函数并捕获任何可能发生的错误,如果没有发生错误,则返回true和f函数的返回值,否则返回false和错误信息。
示例
function foo()
error("foo error")
end
local status, res = pcall(foo)
if status == false then
print("error: " .. res)
end
输出:
error: foo error
解释:调用foo函数时由于调用error()函数抛出异常,导致pcall返回false和错误信息。
xpcall
xpcall(f, msgh, arg1, ···)
函数与pcall函数类似,但是可以自定义错误处理函数msgh,其会接收错误信息作为参数,并返回错误信息。
示例
function foo()
error("foo error")
end
function mymsg(errmsg)
print("mymsg:", errmsg)
end
xpcall(foo, mymsg)
输出:
mymsg: foo.lua:2: foo error
解释:调用foo函数时由于调用error()函数抛出异常,导致xpcall使用mymsg自定义错误处理函数处理错误信息。
debug
debug库提供了一些用于debug的函数。其中最常用的是debug.traceback()函数,该函数用于获取当前错误的堆栈信息。
示例
function foo()
error("foo error")
end
function mymsg(errmsg)
print("mymsg:", debug.traceback(errmsg))
end
xpcall(foo, mymsg)
输出:
mymsg: stack traceback:
foo.lua:2: in function 'foo'
foo.lua:8: in function <foo.lua:7>
[C]: in function 'xpcall'
foo.lua:8: in main chunk
[C]: in ?
解释:调用foo函数时由于调用error()函数抛出异常,导致xpcall使用mymsg自定义错误处理函数处理错误信息,并且使用debug.traceback获取异常堆栈信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Lua中的异常处理pcall、xpcall、debug使用实例 - Python技术站