最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Lua中的異常處理pcall、xpcall、debug使用實(shí)例

 更新時(shí)間:2014年09月23日 10:49:24   投稿:junjie  
這篇文章主要介紹了Lua中的異常處理pcall、xpcall、debug使用實(shí)例,這3個(gè)函數(shù)是Lua中的異常處理必須用到的,需要的朋友可以參考下

如果需要在Lua中處理錯(cuò)誤,必須使用函數(shù)pcall(protected call)來(lái)包裝需要執(zhí)行的代碼。

pcall接收一個(gè)函數(shù)和要傳遞個(gè)后者的參數(shù),并執(zhí)行,執(zhí)行結(jié)果:有錯(cuò)誤、無(wú)錯(cuò)誤;返回值true或者或false, errorinfo

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

簡(jiǎn)單示例
復(fù)制代碼 代碼如下:

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

這里注意對(duì)返回值的邏輯判斷
復(fù)制代碼 代碼如下:

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

pcall以一種"保護(hù)模式"來(lái)調(diào)用第一個(gè)參數(shù),因此pcall可以捕獲函數(shù)執(zhí)行中的任何錯(cuò)誤。

通常在錯(cuò)誤發(fā)生時(shí),希望落得更多的調(diào)試信息,而不只是發(fā)生錯(cuò)誤的位置。但pcall返回時(shí),它已經(jīng)銷毀了調(diào)用桟的部分內(nèi)容。Lua提供了xpcall函數(shù),xpcall接收第二個(gè)參數(shù)——一個(gè)錯(cuò)誤處理函數(shù),當(dāng)錯(cuò)誤發(fā)生時(shí),Lua會(huì)在調(diào)用桟展看(unwind)前調(diào)用錯(cuò)誤處理函數(shù),于是就可以在這個(gè)函數(shù)中使用debug庫(kù)來(lái)獲取關(guān)于錯(cuò)誤的額外信息了。

debug庫(kù)提供了兩個(gè)通用的錯(cuò)誤處理函數(shù):

debug.debug:提供一個(gè)Lua提示符,讓用戶來(lái)價(jià)差錯(cuò)誤的原因
debug.traceback:根據(jù)調(diào)用桟來(lái)構(gòu)建一個(gè)擴(kuò)展的錯(cuò)誤消息

復(fù)制代碼 代碼如下:

>=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

相關(guān)文章

最新評(píng)論

福安市| 巨野县| 甘谷县| 酉阳| 咸阳市| 苏州市| 拜泉县| 成安县| 轮台县| 雷州市| 竹北市| 江口县| 曲阳县| 海伦市| 永善县| 连江县| 津市市| 双桥区| 左贡县| 阿克陶县| 温宿县| 沿河| 丰宁| 朝阳市| 太谷县| 呼图壁县| 莎车县| 梧州市| 桂林市| 福建省| 济源市| 达拉特旗| 四川省| 东台市| 哈巴河县| 新蔡县| 静乐县| 邹平县| 黄陵县| 安义县| 夹江县|