是否可以更改 Lua 错误消息的输出?

Posted

技术标签:

【中文标题】是否可以更改 Lua 错误消息的输出?【英文标题】:Is it possible to change the output of Lua error messages? 【发布时间】:2019-01-20 13:33:01 【问题描述】:

我设法通过修改 dbg_printf 方法来更改错误消息的输出。但是,该方法不处理以下错误消息:

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

哪些方法可以处理这些类型的错误?

【问题讨论】:

我不知道Lua在这些平台上的详细情况,但是Lua内核并没有输出任何错误信息。在 Lua 中捕获错误的正确方法是使用 pcalllua_pcall @lhf 我发现了一个名为 lua_cpcall 的函数声明。我会尝试修改它,看看是不是那个。 【参考方案1】:

错误消息来自函数luaG_typeerror 中的文件ldebug.c。但我猜你使用的是较旧的 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

【讨论】:

“您使用的是较旧的 Lua 版本” - 正确,NodeMCU 固件使用 Lua 5.1.3。【参考方案2】:

它应该比深入研究 C api 更简单。

就像@lhf 说的:

if pcal(risky) then 
  print("this works")
else
  print("phooey!")
end

或者,您可以停止程序并收到如下错误消息:

if pcal(risky) then 
  print("this works")
else
  error("your error message here")
end

【讨论】:

以上是关于是否可以更改 Lua 错误消息的输出?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以看到 WPF 崩溃的错误消息? [复制]

电脑编程可以在哪里学习?

lua中怎么捕获错误异常信息

更改MsBuild错误消息语言

lua中怎么捕获错误异常信息

“无法读取未定义的属性”错误消息是不是已更改?