首页 > 解决方案 > pcall() 忽略 os.execute() 错误

问题描述

我正在处理错误,它几乎可以工作,但在最重要的一步上失败了。

在这个文件中,“KAImage.lua”我有一个语法错误(=vs ==)和下面的示例函数

print(status, err = pcall(os.execute, "/System/Library/Frameworks/Kakao.framework/KAImage.lua"))

调用它给我回溯错误,紧随其后true true,因此意味着pcall()绝对忽略异常。

脚本执行不会停止,我真的看不出问题出在哪里。

标签: error-handlinglua

解决方案


您的代码片段有语法错误,正确的代码应如下所示:

local status, err = pcall(os.execute, "/System/Library/Frameworks/Kakao.framework/KAImage.lua")
print(status, err)

我不认为使用执行 Lua 文件os.execute是一个好主意。它可以与适当的 shebang 一起使用,但会产生单独的进程。

您需要的 IMO 是dofile(lua_file_name)

打开命名文件并将其内容作为 Lua 块执行。...返回块返回的所有值。如果出现错误,dofile 会将错误传播给它的调用者(也就是说,dofile 不会在保护模式下运行)。

捕获错误是 pcall 的工作,如果您确实需要捕获错误,您可以使用如下代码:

local chunk, err = loadfile(lua_file_name)
if not chunk then
    -- invalid Lua code, check err
    return
end
local ok, err = xpcall (chunk, debug.traceback))
if not ok then
    -- error was catched, err contains detailed stack info and error description
    return
end
-- success

推荐阅读