Lua中异常处理分为pcall
、xpcall
、debug
,若需在Lua中处理错误,必须使用 pcall(protected call)
来包装所需执行的代码。
1.pcall
if pcall(fname, args...) then
return true
else
return false
end
pcall
接收一个函数和所要传递给函数的参数,并执行函数,函数执行有错误则返回true
,无错误则返回false
。
pcall
以一种保护模式来调用第一个参数,因此可以捕获函数执行中的任何错误。
使用示例
function math.newrandomseed()
local ok, socket = pcall(function()
return require("socket")
end)
if ok then
math.randomseed(socket.gettime() * 1000)
else
math.randomseed(os.time())
end
math.random()
math.random()
math.random()
math.random()
end
2.xpcall
local status, msg = xpcall(main, __G__TRACKBACK__)
if not status then
print(msg)
end
xpcall
(调用函数, 错误捕获函数)
通常在错误发生时,希望获得更多的调试信息,而不只是发生错误的位置。pcall
返回时已经销毁了调用栈的部分内容。
Lua提供了xpcall
,接收第二个参数,即一个错误处理函数。当错误发生时,Lua会在调用栈展看unwind
前调用错误处理函数,于是可以在xpcall
中使用debug
库来获取关于错误的额外信息。
3.debug
Lua提供xpcall
函数来捕获异常,当错误发生时,Lua会在栈释放前调用错误处理函数,因此可使用debug
库收集错误信息。常用debug
处理函数包括:
debug.debug
给出Lua的提示符,可手工查看错误发生时的情况。
debug.traceback
控制器解释器用来构建错误信息的函数
程序启动后,xpcall
(表示以“保护模式”调用函数)会被执行,它会调用main()
函数。如果发生错误,则会调用__G__TRACKBACK__()
函数。
网友评论