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