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

Error handling pcall()忽略os.execute()错误,error-handling,lua,Error Handling,Lua,我正在做一个错误处理,它几乎可以工作,但在最重要的一步失败了 在这个文件“KAImage.lua”中,我有一个语法错误(=vs=),下面的示例函数 print(status, err = pcall(os.execute, "/System/Library/Frameworks/Kakao.framework/KAImage.lua")) 调用它会给我回溯错误,紧接着就是true,这意味着pcall()完全忽略异常 脚本执行没有停止,我也看不出问题出在哪里。os.execute在执行命令失败时

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

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

print(status, err = pcall(os.execute, "/System/Library/Frameworks/Kakao.framework/KAImage.lua"))
调用它会给我回溯错误,紧接着就是
true
,这意味着
pcall()
完全忽略异常


脚本执行没有停止,我也看不出问题出在哪里。

os.execute
在执行命令失败时不会引发任何错误;它返回
nil
作为第一个值,以指示错误以及一些附加值,如。

os.execute
在执行命令失败时不会引发任何错误;它返回
nil
作为第一个值,以指示错误以及一些附加值,因为。

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

local status, err = pcall(os.execute, "/System/Library/Frameworks/Kakao.framework/KAImage.lua")
print(status, err)
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
我认为使用
os.execute
执行Lua文件不是一个好主意。 它将与适当的shebang一起工作,但会产生单独的进程

您需要的IMO是
dofile(lua\u file\u name)

打开命名文件并将其内容作为Lua块执行。。。返回区块返回的所有值。万一 错误,dofile将错误传播到其调用者(即dofile 不在保护模式下运行)

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

local status, err = pcall(os.execute, "/System/Library/Frameworks/Kakao.framework/KAImage.lua")
print(status, err)
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

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

local status, err = pcall(os.execute, "/System/Library/Frameworks/Kakao.framework/KAImage.lua")
print(status, err)
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
我认为使用
os.execute
执行Lua文件不是一个好主意。 它将与适当的shebang一起工作,但会产生单独的进程

您需要的IMO是
dofile(lua\u file\u name)

打开命名文件并将其内容作为Lua块执行。。。返回区块返回的所有值。万一 错误,dofile将错误传播到其调用者(即dofile 不在保护模式下运行)

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

local status, err = pcall(os.execute, "/System/Library/Frameworks/Kakao.framework/KAImage.lua")
print(status, err)
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

对将
os.execute
替换为
dofile
工作正常,非常感谢。我没有使用它,因为它以前没有,但我的代码几乎没有变化,我很高兴现在不需要变通了。是的!将
os.execute
替换为
dofile
工作正常,非常感谢。我没有使用它,因为它以前没有,但我的代码几乎没有改变,我很高兴现在没有必要采取变通办法。