assert(conditions,message):
assert函数首先检查第一个参数,若正确则继续往下执行,否则assert以第二个参数作为错误信息抛出
local function add(a,b)
assert(type(a) == "number", "a 不是一个数字")
assert(type(b) == "number", "b 不是一个数字")
return a+b
end
add(10)
执行以上程序会出现一下错误:
lua: test.lua:3: b 不是一个数字
stack traceback:
[C]: in function 'assert'
test.lua:3: in local 'add'
test.lua:6: in main chunk
[C]: in ?
error(message[,level]:
error的功能是终止正在执行的函数,并返回message的内容作为错误信息(error函数永远都不会返回),通常情况下,error会附加一些错误位置的信息到message头部。
Level参数指示获得错误的位置:
Level=1[默认]:为调用error位置(文件+行号)
Level=2:指出哪个调用error的函数的函数
Level=0:不添加错误位置信息
pcall(function,parameter):
pcall接收一个函数和要传递给该函数的参数,执行结果无错误则返回true,有错误则返回false,errorinfo,如果参数1中这个函数也会return值,则可以通过定义第二个值来接收
local a = pcall(function(i) print(i) end, 33)
print(a) --true
local b = pcall(function(i) print(i) error('error..') end, 33)
print(b) --false
local i, v = pcall(function (i) return i end, 33)
print(i, v) --打印出i为true v为33
local i, v = pcall(function (i) end, 33)
print(i, v) --打印出i为true v为nil
pcall以一种“保护模式”来调用第一个参数,因此pcall可以捕获函数执行中的任何错误,通常在错误发生时,希望落得更多的调试信息,而不只是发生错误的位置。但pcall返回时,它已经销毁了调用桟的部分内容。
xpcall(function1,function2,parameter):
Lua提供了xpcall函数,function1为将要执行的函数,xpcall接收第二个参数是一个错误处理函数,后面的参数为提供给function1函数的参数,当错误发生时,Lua会在调用桟展开(unwind)前调用错误处理函数,于是就可以在这个函数中使用debug库来获取关于错误的额外信息了。
debug库提供了两个通用的错误处理函数:
1.debug.debug:提供一个Lua提示符,让用户来检查错误的原因
2.debug.traceback:根据调用桟来构建一个扩展的错误消息
function myfunction ()
n = n / nil
end
function myerrorhandler(err)
print("ERROR:", err)
end
status = xpcall(myfunction, myerrorhandler)
print(status)
--输出
ERROR: test2.lua:2: attempt to perform arithmetic on global 'n' (a nil value)
false