麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > 綜合 > 正文

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
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 毛片118极品美女写真 | 欧美日韩国产一区二区三区在线观看 | 日本高清无遮挡 | 激情久久精品 | 国产99久久精品一区二区300 | 九色一区二区 | 久久99久久99精品 | 黄色欧美精品 | 成人性视频欧美一区二区三区 | 一本色道精品久久一区二区三区 | 国产影院一区 | 久久网国产精品 | 一区二区三区在线观看国产 | 水卜樱一区二区av | 男女无遮挡羞羞视频 | 羞羞网站在线看 | 国产成人77亚洲精品www | 爱看久久 | 国产亚洲精品一区二区三区 | 深夜激情视频 | 草草视频在线 | 日本在线不卡一区二区三区 | 欧美激情精品久久久久久久久久 | 蜜桃麻豆视频 | 国产成人aⅴ | 特黄一区二区三区 | 美女黄色影院 | 毛片大全 | 欧美日韩一区,二区,三区,久久精品 | 精品国产一区二区久久 | 成人在线观看免费观看 | v11av在线视频成人 | 中文字幕在线视频网站 | 国产亚洲精品成人a | 午夜精品在线视频 | 免费一级毛片观看 | sese在线视频 | 激情九九| 青青国产在线视频 | 999久久国产 | 免费网址黄 |