Lua中assert( )函数的使用
当Lua遇到不期望的情况时就会抛出错误,比如:两个非数字进行相加;调用一个非函数的变量;访问表中不存在的值等。你也可以通过调用error函数显示的抛出错误,error的参数是要抛出的错误信息。
assert(a,b) --a是要检查是否有错误的一个参数,b是a错误时抛出的信息。第二个参数b是可选的。
当用error来抛出错误时
print("enter a number:") n = io.read("*number") if not n then error("invalid input") end
Lua提供了专门的内置函数assert( )来完成上述的类似功能
print("enter a number:") n = assert(io.read("*number"), "invalid input")
assert首先检查的是第一个参数是否返回错误,如果不返回错误,则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 ?
因为在执行方法add时只传入了一个数字,第二个参数默认为空值nil,nil不为数字,所以异常
以下还有部分示例
1.「没有Assert的情况」
--这里输入一个数字 print(string.format("Please Enter A Number:")) input = io.read("*number") print(input)
当输入的是“?”时,结果如下
可以看到,系统没有报错,可以正常运行。
2.「有Assert的情况」
--这里输入一个数字 print(string.format("Please Enter A Number:")) input1 = assert(io.read("*number")) print(input)
当再次输入“?”时,结果就会不相同了
可以看到,当有assert包围代码后,遇到错误,会抛出异常,而不会上刚刚那样。这样的用处十分之大,当项目大了之后,出错可以很好地定位到是哪里出错。
另外,还有 pcall 和 xpcall、debug 也可以获取异常,具体内容可以访问:菜鸟教程