【发布时间】:2013-08-03 10:09:43
【问题描述】:
在 Lua 中,使用 message 参数调用标准 error() 函数会输出提供的错误消息并打印堆栈跟踪,例如执行以下代码:
print("hello")
error("oops!")
print("world")
会产生以下输出:
$ lua test.lua
hello
lua: test.lua:2: oops!
stack traceback:
[C]: in function 'error'
test.lua:2: in main chunk
[C]: ?
但是,不带参数调用error() 似乎会使 Lua 无声地死掉,而不会打印堆栈跟踪。执行此代码:
print("hello")
error() // no arguments provided
print("world")
会产生这个输出:
$ lua test2.lua
hello
文档没有说明省略第一个 message 参数:
错误(消息[,级别])
终止最后调用的受保护函数并返回消息为 错误信息。函数错误永远不会返回。通常,错误会增加 关于错误位置的一些信息 信息。 level 参数指定如何获取错误位置。 使用级别 1(默认),错误位置是错误的位置 函数被调用。 Level 2 将错误指向函数所在的位置 所谓的错误被称为;等等。通过 0 级可避免 在消息中添加错误位置信息。
我想知道这是否是预期的行为?即使没有提供消息,IMO 仍然打印堆栈跟踪(并且可能输出一些默认文本,例如 error)是有意义的,因为这就是 assert() 函数的工作原理。
【问题讨论】:
标签: error-handling lua