Error handling pcall()忽略os.execute()错误
我正在做一个错误处理,它几乎可以工作,但在最重要的一步失败了 在这个文件“KAImage.lua”中,我有一个语法错误(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在执行命令失败时
=
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
工作正常,非常感谢。我没有使用它,因为它以前没有,但我的代码几乎没有改变,我很高兴现在没有必要采取变通办法。