python在程序運(yùn)行的過(guò)程中,如果發(fā)生了錯(cuò)誤,可以事先約定返回一個(gè)錯(cuò)誤代碼,這樣,就可以知道是否有錯(cuò),以及出錯(cuò)的原因。在操作系統(tǒng)提供的調(diào)用中,返回錯(cuò)誤碼非常常見(jiàn)。比如打開(kāi)文件的函數(shù)open(),成功時(shí)返回文件描述符(就是一個(gè)整數(shù)),出錯(cuò)時(shí)返回-1。
用錯(cuò)誤碼來(lái)表示是否出錯(cuò)十分不便,因?yàn)楹瘮?shù)本身應(yīng)該返回的正常結(jié)果和錯(cuò)誤碼混在一起,造成調(diào)用者必須用大量的代碼來(lái)判斷是否出錯(cuò):
deffoo():
r=some_function()
ifr==(-1):
return(-1)
#dosomething
returnr
defbar():
r=foo()
ifr==(-1):
print('Error')
else:
pass
一旦出錯(cuò),還要一級(jí)一級(jí)上報(bào),直到某個(gè)函數(shù)可以處理該錯(cuò)誤(比如,給用戶(hù)輸出一個(gè)錯(cuò)誤信息)。
所以高級(jí)語(yǔ)言通常都內(nèi)置了一套try...except...finally...的錯(cuò)誤處理機(jī)制,Python也不例外。
try
讓我們用一個(gè)例子來(lái)看看try的機(jī)制:
try:
print('try...')
r=10/0
print('result:',r)
exceptZeroDivisionErrorase:
print('except:',e)
finally:
print('finally...')
print('END')
當(dāng)我們認(rèn)為某些代碼可能會(huì)出錯(cuò)時(shí),就可以用try來(lái)運(yùn)行這段代碼,如果執(zhí)行出錯(cuò),則后續(xù)代碼不會(huì)繼續(xù)執(zhí)行,而是直接跳轉(zhuǎn)至錯(cuò)誤處理代碼,即except語(yǔ)句塊,執(zhí)行完except后,如果有finally語(yǔ)句塊,則執(zhí)行finally語(yǔ)句塊,至此,執(zhí)行完畢。
上面的代碼在計(jì)算10/0時(shí)會(huì)產(chǎn)生一個(gè)除法運(yùn)算錯(cuò)誤:
try...
except:divisionbyzero
finally...
END
從輸出可以看到,當(dāng)錯(cuò)誤發(fā)生時(shí),后續(xù)語(yǔ)句print('result:',r)不會(huì)被執(zhí)行,except由于捕獲到ZeroDivisionError,因此被執(zhí)行。最后,finally語(yǔ)句被執(zhí)行。然后,程序繼續(xù)按照流程往下走。
以上內(nèi)容為大家介紹了python培訓(xùn)之程序出錯(cuò)怎么處理,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。