error-handling - pcall() 忽略 os.execute() 错误
问题描述
我正在处理错误,它几乎可以工作,但在最重要的一步上失败了。
在这个文件中,“KAImage.lua”我有一个语法错误(=
vs ==
)和下面的示例函数
print(status, err = pcall(os.execute, "/System/Library/Frameworks/Kakao.framework/KAImage.lua"))
调用它给我回溯错误,紧随其后true true
,因此意味着pcall()
绝对忽略异常。
脚本执行不会停止,我真的看不出问题出在哪里。
解决方案
您的代码片段有语法错误,正确的代码应如下所示:
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
推荐阅读
- stripe-payments - Stripe Proration - 按年计费,按月收费的数量变化
- python - 使 Python 中的 GStreamer 视频/音频平滑和循环
- mongodb - MongoDB Aggregation - $unwind order 文档是否与嵌套数组 order 相同
- vue.js - 我收到一个错误“无法读取未定义的属性 $apollodata”,但我的页面没有 Apollo 的属性
- reactjs - 什么时候在组件上调用反应构造函数?因为我的只被调用一次
- javascript - 在 angularjs 中使用 ng-pattern 时浏览器挂起
- javascript - Navigator.getGamepads() 不会返回相同类型游戏手柄的不同实例
- python - 数据流作业一直显示“开始”
- angular - 如何防止我导入的模块覆盖我的路由?
- wordpress - Wordpress:重命名工具栏链接