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

时间:2018-11-16 18:25:15

标签: lua multifile

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

2 个答案:

答案 0 :(得分:2)

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

  

Source:如果没有语法错误,则将已编译的块作为函数返回;否则,将其返回。否则,返回nil和错误消息。

local success, syntaxError = loadfile("myfile.lua")
if not success then
    print("There was a syntax error:", syntaxError)
else
    print("No syntax error")
end

pcall不会引发错误,因此不需要loadstring

答案 1 :(得分:1)

我很傻,答案很明显:

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

编辑:如Egor Skriptunoff在评论中所指出的,一种更有效的解决方案:

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

之所以行之有效,是因为pcall的第一个参数之后的所有参数都作为传递给pcall的第一个参数的参数(在本例中为loadfile)传递。