在Lua中获得“清晰”的错误信息。

我在许多函数中使用error函数,并希望将错误信息传递给用户。但显然,我不希望包含有关错误发生的详细信息; 这些信息应该只记录在日志文件中。

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

error("连接超时!")

pcall通过捕获函数调用者的错误信息。 但是,该消息不仅包含我传递的消息,还包括引发错误的文件名和行号:

common/net/enetclient.lua:21: Connection timed out!

问题是:是否有一种方法仅提取错误消息本身,还是我必须手动执行以下操作:

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

干杯,

点赞
用户142162
用户142162

error函数的文档中可得:

error (message [, level])

终止最后一个被调用的被保护函数,并将message 设为错误信息。函数error永远不会返回。

通常情况下,如果message是字符串,error会在信息的开头添加一些关于错误位置的信息。参数level指定了如何获取错误位置。在级别 1(默认值)时,错误位置在error函数被调用的地方。级别 2 将错误指向调用error所在的函数调用位置,以此类推。传递级别 0 可以避免在信息中加入错误位置信息。

从第二段所述,将error调用的级别传递为 0 将会得到期望的输出:

error("连接超时了!", 0)
2014-01-31 15:01:14