Lua 學習筆記(八)錯誤(error)

2022-03-25 01:50:37 字數 1290 閱讀 8270

lua所遇到的任何未預期條件都會引發乙個錯誤。因此在發生錯誤時不能簡單的崩潰或著退出,而是結束當前程式塊並返回應用程式。當錯誤引發時進行恰當的處理是最合適的,然而這個階段伴隨著錯誤的捕獲、錯誤的處理、錯誤追溯等處理。lua中有函式pcall、error、assert函式來操作錯誤。其中pcall用於捕獲錯誤、error丟擲乙個錯誤、assert是error的包裝。

一、丟擲錯誤

在lua中丟擲錯誤資訊的函式是error,通常包含呼叫堆疊資訊以及錯誤提示資訊。而assert是error的包裝,它有兩個引數可選,第乙個引數如果返回false,那麼就引發錯誤,丟擲錯誤提示資訊第二個引數。因此使用assert要比error更為簡便。

兩種方式都是可以的,而且可以自定義錯誤資訊,簡便快捷的跟蹤錯誤位置及錯誤模組。

二、捕獲及處理錯誤

丟擲錯誤會引發程式停止執行,那麼如何在發現錯誤的情況下繼續程式的執行呢?pcall函式為程式的異常處理提供了很好的支援,它讓可能會發生錯誤的程式在安全的環境內執行,如果發生錯誤,那麼程式不停止,可根據需要去呼叫自定義錯誤處理。

pcall函式在以一種「安全模式」來呼叫它的第乙個引數,它可以捕獲函式執行中的任何錯誤,如果沒有發生錯誤,那麼返回true及函式呼叫的返回值,否則返回false及錯誤資訊。當然錯誤資訊不一定是乙個字串,還可以是lua中的任何值。

三、錯誤訊息與追溯

當錯誤發生時,如果需要能夠追溯到發生錯誤時的函式呼叫情況即顯示乙個完整的函式呼叫棧,那麼就要使用xpcall函式,因為pcall函式在返回其訊息時,它已經銷毀了呼叫棧的部分內容。xpcall函式除了接受乙個被呼叫的函式以外,還有第二個引數,即錯誤處理函式。當錯誤發生時,lua會在呼叫棧展開前呼叫錯誤處理函式。可以在處理函式中使用debug庫來獲取有關錯誤的額外資訊,乙個是debug.debug()函式,另乙個是debug.traceback()函式,其中debug函式會提供乙個lua操作符( lua_debug> ),讓使用者來檢查錯誤的原因。而traceback函式會根據呼叫棧來構建乙個擴充套件錯誤訊息,當然也可以在任何時候呼叫這個函式來獲取當前的呼叫棧資訊。

Lua學習筆記 lua堆疊

首先了解一下c 與lua之間的通訊 假設在乙個lua檔案中有如下定義 hello.lua檔案 請注意紅色數字,代表通訊順序 1 c 想獲取lua的myname字串的值,所以它把myname放到lua堆疊 棧頂 以便lua能看到 2 lua從堆疊 棧頂 中獲取myname,此時棧頂再次變為空 3 lu...

lua學習筆記

近日時間比較充裕,學習一下lua語言,順便寫下筆記,方便以後加深學習。c c 呼叫lua動態庫及標頭檔案位址 用於c c 嵌入lua指令碼解析 也可以到或找適合自己的版本。一 hello world 哈哈,先使用經典的hello world帶進門 1.在 執行 鍵入cmd開啟dos視窗,並將當前目錄...

Lua 學習筆記

1 關於table lua 中的 table 是python 中的 list 和 dict 的混合體。t 相當於 t 簡單的看,實際上完全相當於 python 中的 dict 不過實際對於鍵為整數的,是放在 list 中的,方便快速索引。當然基於節省記憶體的考量,對於跳躍的大整數鍵,依然是放在 di...