能否更改 Lua 错误消息的输出?

我成功地通过修改 dbg_printf 方法来更改错误消息的输出。然而,该方法无法处理以下错误消息:

lua: ?:0: attempt to call global 'log' (a nil value)

哪些方法能够处理这些类型的错误?

点赞
用户8572843
用户8572843

错误信息来自于 ldebug.c 文件中的 luaG_typeerror 函数。但我猜你使用的是旧版本的 Lua,因为我的信息略有不同:

attempt to call a nil value (global 'log')

如果可以的话,你应该尝试防止这个错误:

if type(log) == "function" then
   log()
end

或者如@lhf所说使用 pcall

if pcall(log) then
    -- no errors while running 'log'
    ...
else
    -- 'log' raised an error: take appropriate actions
    ...
end
2018-08-14 12:46:09
用户8878446
用户8878446

应该比深入研究C API要简单。

就像@lhf所说的:

如果pcal(有风险)然后
  打印(“这个有效”)
否则
  打印(“不好了!”)
结束

或者你可以停止程序并像这样获取您的错误消息:

如果pcal(risky) then
  print("this works")
else
  error("your error message here")
end
2018-08-14 19:25:35