加载 Lua 文件并捕获语法错误

有没有一个函数可以在 Lua 中尝试加载另一个 Lua 文件并捕获任何语法错误?我找不到任何不止捕获异常的解决方法。我的解决方法是在项目中包含一个 Lua 解析器吗?

点赞
用户8076767
用户8076767

我很傻,答案很显然:

pcall(function()
    loadfile("path/to/file")
end)

编辑: 正如 Egor Skriptunoff 在评论中指出的那样,更有效的解决方案:

pcall(loadfile, "path/to/file")

这是有效的,因为在 pcall 的第一个参数之后的所有参数都作为传递给 pcall 的第一个参数 -- 在这种情况下为 loadfile -- 的参数。

2018-11-16 18:30:22
用户2616735
用户2616735

loadfileload/ loadstring 一样,在存在语法错误时会返回 nil 和错误信息:

源代码:如果没有语法错误,会返回编译后的代码块作为函数;否则,返回 nil 和错误信息。

local success, syntaxError = loadfile("myfile.lua")
if not success then
    print("存在语法错误:", syntaxError)
else
    print("没有语法错误")
end

使用 pcall 不是必要的,因为 loadstring 不会抛出错误。

2018-11-16 23:12:17