国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Lua中的異常處理pcall、xpcall、debug使用實例

2024-07-21 23:04:07
字體:
來源:轉載
供稿:網友

如果需要在Lua中處理錯誤,必須使用函數pcall(protected call)來包裝需要執行的代碼。

pcall接收一個函數和要傳遞個后者的參數,并執行,執行結果:有錯誤、無錯誤;返回值true或者或false, errorinfo

復制代碼 代碼如下:
  
if pcall(function_name, ….) then
-- no error
else
-- some error
end

簡單示例
復制代碼 代碼如下:

> =pcall(function(i) print(i) end, 33)
33
true
  
> =pcall(function(i) print(i) error('error..') end, 33)
33
false        stdin:1: error..

這里注意對返回值的邏輯判斷
復制代碼 代碼如下:

> function f() return false,2 end
> if f() then print '1' else print '0' end
0

pcall以一種"保護模式"來調用第一個參數,因此pcall可以捕獲函數執行中的任何錯誤。

 

通常在錯誤發生時,希望落得更多的調試信息,而不只是發生錯誤的位置。但pcall返回時,它已經銷毀了調用桟的部分內容。Lua提供了xpcall函數,xpcall接收第二個參數——一個錯誤處理函數,當錯誤發生時,Lua會在調用桟展看(unwind)前調用錯誤處理函數,于是就可以在這個函數中使用debug庫來獲取關于錯誤的額外信息了。

debug庫提供了兩個通用的錯誤處理函數:

debug.debug:提供一個Lua提示符,讓用戶來價差錯誤的原因
debug.traceback:根據調用桟來構建一個擴展的錯誤消息

 

復制代碼 代碼如下:

>=xpcall(function(i) print(i) error('error..') end, function() print(debug.traceback()) end, 33)
33
stack traceback:
stdin:1: in function <stdin:1>
[C]: in function 'error'
stdin:1: in function <stdin:1>
[C]: in function 'xpcall'
stdin:1: in main chunk
[C]: in ?
false        nil
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北碚区| 新野县| 皮山县| 察隅县| 内丘县| 钟山县| 重庆市| 兖州市| 枣强县| 弥渡县| 西乡县| 定日县| 邯郸市| 繁峙县| 高平市| 齐齐哈尔市| 池州市| 晋城| 岑溪市| 于都县| 铜鼓县| 永胜县| 昌平区| 邓州市| 台中县| 锡林浩特市| 五家渠市| 太和县| 临高县| 白水县| 贞丰县| 石泉县| 临澧县| 涪陵区| 溧阳市| 高台县| 原平市| 柘荣县| 台南市| 乌拉特前旗| 普宁市|