参考网址:https://www.runoob.com/lua/lua-error-handling.html
pcall函数的使用:
举例1:正确调用情况:
function addNumbers(a, b)
print("number is")
return a + b
end
local res, info = pcall(addNumbers, 1, 20)
print(res)
print(info)
这是正常的情况下,调用。
参数说明:
pcall的第一个参数是函数的名字;
pcall的后面的参数是给函数的传递的参数列表,可以是多个,也可以是变长的参数…
上面执行的结果是:
其中res记录是执行函数是否正确,返回true或者false。第二个返回值为函数的执行结果,这里返回的是21
举例2:错误调用情况
function addNumbers(a, b)
print("number is")
return a + b
end
local res, info = pcall(addNumbers, 1)
print(res)
print(info)
这里我们只给addNumbers函数传递了一个参数1,这样在a+b的时候,b为nil,此时就会报错。
这里的res为false,说明函数执行出错了。
info为提示信息,说执行了nil加法。
ok,其实pcall已经够用了,有调用出错的提示信息了。
但是lua还提供xpcall。
xpcall和pcall的区别最大的地方是,可以传递一个出错的函数。
举例1:正确调用情况
function addNumbers(a, b)
print("number is")
return a + b
end
function errorFunction(err)
print(err)
print(debug.traceback())
end
local res, info = xpcall(addNumbers, errorFunction, 1, 2)
print(res)
print(info)
同样的res记录的是调用函数是否正确的返回,info记录的是调用函数的返回结果,这里为3。
举例2:错误调用情况
function addNumbers(a, b)
print("number is")
return a + b
end
function errorFunction(err)
print(err)
print(debug.traceback())
end
local res, info = xpcall(addNumbers, errorFunction, 1)
print(res)
print(info)
这里使用了:
debug.debug:提供一个Lua提示符,让用户来检查错误的原因
debug.traceback:根据调用桟来构建一个扩展的错误消息
这里使用debug.debug和debug.traceback来打印出错堆栈信息。