pcall
--[[
pcall
返回的错误信息可以是代码执行的具体错误原因
或者是error函数返回的错误信息
pcall返回的错误信息原则是尽可能详细的描述错误原因
]]
function foo()
a = 'a' + 1
end
local ok, err = pcall(foo)
if not ok then
print(err)
end
function bar()
error("ops, error")
end
local ok, err = pcall(bar)
if not ok then
print(err)
end
--运行结果:
--pcall_2.lua:10: attempt to perform arithmetic on a string value
--pcall_2.lua:20: ops, error
xpcall
--[[
xpacll
第一个参数是调用函数,第二个参数是错误处理函数
错误处理函数:
debug.traceback:打印函数调用栈
debug.debug:给出lua提示符,可以自己动手查看错误发生的原因
]]
function fun1(str)
if type(str) ~= "string" then
error("string expected", 1)
else
return str
end
end
local ok, err = xpcall(fun1, debug.traceback, {x = 1})
if not ok then
print(err)
end
local ok, err = xpcall(fun1, debug.debug, {x = 1})
if not ok then
print(err)
end
--运行结果:
--[[
pcall_4.lua:11: string expected
stack traceback:
[C]: in function 'error'
pcall_4.lua:11: in function <pcall_4.lua:9>
[C]: in function 'xpcall'
pcall_4.lua:18: in main chunk
[C]: ?
]]