處理 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))