溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Lua 錯(cuò)誤處理

發(fā)布時(shí)間:2020-07-26 16:12:04 來源:網(wǎng)絡(luò) 閱讀:949 作者:liam2199 欄目:開發(fā)技術(shù)

Lua 錯(cuò)誤處理

程序運(yùn)行中錯(cuò)誤處理是必要的,在我們進(jìn)行文件操作,數(shù)據(jù)轉(zhuǎn)移及web service 調(diào)用過程中都會(huì)出現(xiàn)不可預(yù)期的錯(cuò)誤。如果不注重錯(cuò)誤信息的處理,就會(huì)照成信息泄露,程序無法運(yùn)行等情況。

任何程序語言中,都需要錯(cuò)誤處理。錯(cuò)誤類型有:

  • 語法錯(cuò)誤

  • 運(yùn)行錯(cuò)誤

=================================================================

錯(cuò)誤處理

我們可以使用兩個(gè)函數(shù):assert 和 error 來處理錯(cuò)誤。實(shí)例如下:

assert首先檢查第一個(gè)參數(shù),若沒問題,assert不做任何事情;否則,assert以第二個(gè)參數(shù)作為錯(cuò)誤信息拋出。

error (message [, level])

功能:終止正在執(zhí)行的函數(shù),并返回message的內(nèi)容作為錯(cuò)誤信息(error函數(shù)永遠(yuǎn)都不會(huì)返回)

通常情況下,error會(huì)附加一些錯(cuò)誤位置的信息到message頭部。

Level參數(shù)指示獲得錯(cuò)誤的位置:

  • Level=1[默認(rèn)]:為調(diào)用error位置(文件+行號(hào))

  • Level=2:指出哪個(gè)調(diào)用error的函數(shù)的函數(shù)

  • Level=0:不添加錯(cuò)誤位置信息


pcall 和 xpcall、debug

Lua中處理錯(cuò)誤,可以使用函數(shù)pcall(protected call)來包裝需要執(zhí)行的代碼。

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

語法格式如下

if pcall(function_name, ….) then-- 沒有錯(cuò)誤else-- 一些錯(cuò)誤end

pcall以一種"保護(hù)模式"來調(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庫來獲取關(guān)于錯(cuò)誤的額外信息了。

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


  • debug.debug:提供一個(gè)Lua提示符,讓用戶來價(jià)差錯(cuò)誤的原因

  • debug.traceback:根據(jù)調(diào)用桟來構(gòu)建一個(gè)擴(kuò)展的錯(cuò)誤消息

>=xpcall(function(i) print(i) error('error..') end, function() print(debug.traceback()) end, 33) 33 stack traceback: stdin:1: in function ''&nbsp123''


function myfunction()
	n = n/nil
end

function myerrhandler(err)
	print("ERROR", err)
end

status = xpcall(myfunction, myerrhandler)
print(status)


Lua 錯(cuò)誤處理

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI