不符合Lua语法要求的错误,只能由人工去修改Lua代码。
error.lua
local a == 1错误提示:
lua53: error.lua:1: unexpected symbol near '=='运行时产生的错,一般像索引越界、变量不是预期的值…
error.lua
function sum(a, b) return a + b end local a = 1 local b = 2 -- 错误的修改a的值 a = true print(sum(a, b))错误提示:
C:\Application\lua-5.3.5_Win32_bin\lua53.exe: .\error.lua:2: attempt to perform arithmetic on a boolean value (local 'a') stack traceback: .\error.lua:2: in function 'sum' .\error.lua:11: in main chunk [C]: in ?assert(v, message)
一般用于检查变量值是否是预期
error.lua
local a = 1; assert(type(a) == "boolean", "a不是boolean类型")错误提示:
C:\Application\lua-5.3.5_Win32_bin\lua53.exe: .\error.lua:3: a不是boolean类型 stack traceback: [C]: in function 'assert' .\error.lua:3: in main chunk [C]: in ?error(message [, level])
level:
level=1(默认):为调用error位置(文件+行号)level=2:指出哪个调用error的函数的函数level=0:不添加错误位置信息error.lua
error("this is error message");错误提示:
C:\Application\lua-5.3.5_Win32_bin\lua53.exe: .\error.lua:1: this is error message stack traceback: [C]: in function 'error' .\error.lua:1: in main chunk [C]: in ?检测方法执行过程中是否遇到运行时错误
error.lua
function sum(a, b) return a + b end function main(a, b) print(sum(a, b)) end local ok, errInfo = pcall(main, true, 2) if ok then print("没有错误") else print("碰到错误:" .. errInfo) end错误提示:
碰到错误:.\error.lua:2: attempt to perform arithmetic on a boolean value (local 'a')pcall可以捕获函数执行中的错误的位置,但是销毁了调栈的部份内容,有时我们需要错误方法的栈调用关系使用xpcall
function sum(a, b) return a + b end function main(a, b) print(sum(a, b)) end local msgh = function(err) print(err) print(debug.traceback()) end local status = xpcall(main, msgh, true, 2) print(status)错误提示:
.\error.lua:2: attempt to perform arithmetic on a boolean value (local 'a') stack traceback: .\error.lua:11: in metamethod '__add' .\error.lua:2: in function 'sum' .\error.lua:6: in function 'main' [C]: in function 'xpcall' .\error.lua:14: in main chunk [C]: in ? false