处理 Lua 中的错误
假设我们有以下功能:
function foo(tab)
return tab.a
end -- Script execution errors out w/ a stacktrace when tab is not a table
让我们改进一下吧
function foo(tab)
if type(tab) ~= "table" then
error("Argument 1 is not a table!", 2)
end
return tab.a
end -- This gives us more information, but script will still error out
如果我们不希望函数在出现错误的情况下使程序崩溃,那么在 lua 中执行以下操作是标准的:
function foo(tab)
if type(tab) ~= "table" then return nil, "Argument 1 is not a table!" end
return tab.a
end -- This never crashes the program, but simply returns nil and an error message
现在我们有一个行为类似的函数,我们可以这样做:
if foo(20) then print(foo(20)) end -- prints nothing
result, error = foo(20)
if result then print(result) else log(error) end
如果我们确实希望程序在出现问题时崩溃,我们仍然可以这样做:
result, error = foo(20)
if not result then error(error) end
幸运的是,我们甚至不必每次都写出这一切; lua 有一个功能正是这样做的
result = assert(foo(20))