第一版是為 Lua 5.0 編寫的。儘管在很大程度上仍然適用於後續版本,但仍有一些區別。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買本書,您還將幫助 支持 Lua 項目。
![]() |
Lua 編程 | ![]() |
第一部分。語言 第 8 章。編譯、執行和錯誤 |
對於許多應用程序,您不需要在 Lua 中執行任何錯誤處理。通常,應用程序會執行此處理。所有 Lua 活動都從應用程序的呼叫開始,通常要求 Lua 運行一個塊。如果出現任何錯誤,此呼叫將返回一個錯誤代碼,應用程序可以採取適當的措施。對於獨立解釋器,其主循環只會列印錯誤訊息,並繼續顯示提示符和運行命令。
如果您需要在 Lua 中處理錯誤,您應該使用 pcall
函數(受保護的呼叫)來封裝您的代碼。
假設您想運行一段 Lua 代碼,並捕獲運行該代碼時引發的任何錯誤。您的第一步是將該段代碼封裝在一個函數中;我們稱之為 foo
function foo () ... if unexpected_condition then error() end ... print(a[i]) -- potential error: `a' may not be a table ... end然後,您使用
pcall
呼叫 foo
if pcall(foo) then -- no errors while running `foo' ... else -- `foo' raised an error: take appropriate actions ... end當然,您可以使用匿名函數呼叫
pcall
if pcall(function () ... end) then ... else ...
pcall
函數以受保護模式呼叫其第一個參數,以便在函數運行時捕獲任何錯誤。如果沒有錯誤,pcall
返回 true,以及呼叫返回的任何值。否則,它返回 false,以及錯誤訊息。
儘管其名稱為錯誤訊息,但它不必是字串。您傳遞給 error
的任何 Lua 值都將由 pcall
返回
local status, err = pcall(function () error({code=121}) end) print(err.code) --> 121這些機制提供了我們在 Lua 中執行異常處理所需的一切。我們使用
error
拋出異常,並使用 pcall
捕獲異常。錯誤訊息識別錯誤的類型或錯誤。
版權所有 © 2003–2004 Roberto Ierusalimschy。保留所有權利。 | ![]() |