異常處理
為什么要異常:沒(méi)有異常機(jī)制程序遇到錯(cuò)誤會(huì)崩潰掉艾岂,不在往下運(yùn)行顺少,定義了異常,可以捕獲到異常王浴,并繼續(xù)往下運(yùn)行脆炎;python為每一種異常定制了一個(gè)類型,提供了一種獨(dú)特的語(yǔ)法結(jié)構(gòu)來(lái)進(jìn)行異常處理
- 基本語(yǔ)法
try:
被檢測(cè)的代碼塊
except 捕捉異常類型:
try中一旦檢測(cè)到異常氓辣,就執(zhí)行這個(gè)位置的邏輯
- 異常類只能處理指定的異常情況秒裕,如果非指定異常則無(wú)法處理
s1=hello
try:
int(s1)
except IndexError as e: #
print(e)
- 多分支異常 (多個(gè)except)
try:
被檢測(cè)的代碼塊
except KeyError as e: #捕捉key異常 賦予一個(gè)別名,方便打印
print('===e')
except ValueError as e: #捕捉值異常
print('ValueError')
except IndexError as e: #捕捉index(下標(biāo))異常
print(e)
- 萬(wàn)能異常(Exception)钞啸,就是什么異常都能捕獲到
while True:
try:
s = input('>>>')
int(s)
break
except Exception as y:
print('你輸入的有誤',y)
print('執(zhí)行新的')
這時(shí)你可能想了几蜻,既然有萬(wàn)能異常,我統(tǒng)統(tǒng)就用這個(gè)萬(wàn)能不就好了嘛体斩?嘿嘿梭稚,但是。硕勿。有兩種情況哨毁,一種就是無(wú)論出現(xiàn)什么異常,我們不去管它源武,使用同一段代碼邏輯去處理他們扼褪,這個(gè)時(shí)候就用萬(wàn)能異常就行想幻,另一種情況,對(duì)于不同異常我們需要定制不同的處理邏輯话浇,這個(gè)時(shí)候我們就需要用到多分支異常了脏毯,也可以在多分支異常后面加上萬(wàn)能異常。其實(shí)跟if,elif,else 差不多幔崖。
- 異常的其他執(zhí)行機(jī)制
try:
被檢測(cè)的代碼塊
except KeyError as e: #捕捉key異常 賦予一個(gè)別名食店,方便打印
print('===e')
except ValueError as e: #捕捉值異常
print(e)
except IndexError as e: #捕捉index(下標(biāo))異常
print(e)
else:
print('try內(nèi)代碼塊沒(méi)有異常則執(zhí)行我')
finally:
print('不管有沒(méi)有異常,我都會(huì)執(zhí)行該模塊赏寇,通常是進(jìn)行清理工作')
異常的參考:
image.png