在Lua中收到"清除"错误消息

Hen*_*gen 5 error-handling lua

我在我的很多error函数中使用该函数,并希望将错误消息传播给用户.但是,我显然不希望包含有关错误发生位置的信息; 此信息应仅转到日志文件.

例如,我有一个管理服务器连接的类.如果连接超时,则调用

error("Connection timed out!")
Run Code Online (Sandbox Code Playgroud)

然后通过调用代码捕获错误消息pcall.但是,该消息不仅包含我传递的消息,还包含导致错误的文件名和行号:

common/net/enetclient.lua:21: Connection timed out!
Run Code Online (Sandbox Code Playgroud)

问题是:有没有办法只检索错误消息本身,或者我必须手动执行此操作,如下所示:

local status, msg = pcall(someFunctionThatThrowsErrors)
if not status then
    local file, msg = msg:match("(.-:%d+): (.+)")
    print("Error: " .. msg)
end
Run Code Online (Sandbox Code Playgroud)

干杯,

小智 4

error从该函数的文档中:

error (message [, level])

终止最后调用的受保护函数并message作为错误消息返回。函数error永远不会返回。

通常,error如果消息是字符串,则在消息的开头添加一些有关错误位置的信息。参数level指定如何获取错误位置。对于级别 1(默认值),错误位置是error调用函数的位置。2 级将错误指向调用函数的调用位置error;等等。传递级别 0 可以避免向消息中添加错误位置信息。

0根据第二段中的说明,向调用添加级别error将产生所需的输出:

error("Connection timed out!", 0)
Run Code Online (Sandbox Code Playgroud)