pcall()忽略os.execute()错误

时间:2018-05-21 17:48:47

标签: error-handling lua

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

在此文件中," KAImage.lua"我的语法错误(= vs ==)以及

以下的示例函数
print(status, err = pcall(os.execute, "/System/Library/Frameworks/Kakao.framework/KAImage.lua"))

调用它给我带回溯的错误及其true true之后,所以意味着pcall()绝对忽略异常。

脚本执行没有停止,我无法确定问题出在哪里。

2 个答案:

答案 0 :(得分:1)

os.execute在执行命令失败时不会引发任何错误;它返回nil作为发出错误的第一个值以及一些其他值,如described in the manual

答案 1 :(得分:1)

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

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

我不认为使用os.execute执行Lua文件是个好主意。 它适用于合适的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