聊聊python中的異常嵌套
在Python中,異常也可以嵌套,當(dāng)內(nèi)層代碼出現(xiàn)異常時,指定異常類型與實際類型不符時,則向外傳,如果與外面的指定類型符合,則異常被處理,直至最外層,運用默認(rèn)處理方法進(jìn)行處理,即停止程序,并拋出異常信息。如下代碼:
try:
try:
raise IndexError
except TypeError:
print('get handled')
except SyntaxError:
print('ok')
運行程序:
Traceback (most recent call last):
File "<pyshell#47>", line 3, in <module>
raise IndexError
IndexError
再看另一個被外層try-except捕獲的例子:
try:
try:
1/0
finally:
print('finally')
except:
print('ok')
運行:
finally
ok
這里值得注意的是except:可以捕獲所有的異常,但實際上這樣做也有缺點,即有時候會包住預(yù)定的異常。
另外,需要提到的是raise A from B,將一個異常與另一個異常關(guān)聯(lián)起來,如果from后面的B沒有被外層捕獲,那么A,B異常都將拋出,例如:
try:
1/0
except Exception as E:
raise TypeError('bad') from E
運行:
Traceback (most recent call last):
File "<pyshell#4>", line 2, in <module>
1/0
ZeroDivisionError: division by zeroThe above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<pyshell#4>", line 4, in <module>
raise TypeError('bad') from E
TypeError: bad
相反,如果外層捕獲了B:
try:
try:
1/0
except Exception as E:
raise TypeError from E
except TypeError:
print('no'
運行:
no
最后,再看看try-finally在嵌套中的表現(xiàn)。
try:
try:
1/0
finally:
print('finally')
except:
print('ok')
運行:
finally
ok
不管有沒有異常發(fā)生,或者其是否被處理,finally的代碼都要執(zhí)行,如果異常被處理,則停止,如果沒有被處理,向外走,直至最終沒處理,采用默認(rèn)方法處理,上例中,異常在最外層被處理。
try:
try:
1/0
except Exception as E:
print('happens')
finally:
print('finally')
except E:
print('get handled')
運行:
happens
finally
異常在內(nèi)部被處理,不再向外傳播。
以上就是聊聊python中的異常嵌套的詳細(xì)內(nèi)容,更多關(guān)于python 異常嵌套的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
關(guān)于DataFrame中某列值的替換map(dict)
這篇文章主要介紹了關(guān)于DataFrame中某列值的替換map(dict),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02
Pandas DataFrame實現(xiàn)任意位置插入一列或一行
Pandas是Python中最流行的數(shù)據(jù)處理和分析庫之一,在數(shù)據(jù)分析過程中,有時候需要在Dataframe中插入新的數(shù)據(jù)列,本文主要介紹了Pandas DataFrame實現(xiàn)任意位置插入一列或一行,具有一定的參考價值,感興趣的可以了解一下2023-08-08
Python3網(wǎng)絡(luò)爬蟲之使用User Agent和代理IP隱藏身份
這篇文章主要介紹了Python3網(wǎng)絡(luò)爬蟲之使用User Agent和代理IP隱藏身份,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11
Python基于stuck實現(xiàn)scoket文件傳輸
這篇文章主要介紹了Python基于stuck實現(xiàn)scoket文件傳輸,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04
python使用內(nèi)存zipfile對象在內(nèi)存中打包文件示例
這篇文章主要介紹了python使用內(nèi)存zipfile對象在內(nèi)存中打包文件示例,需要的朋友可以參考下2014-04-04
python用字典統(tǒng)計單詞或漢字詞個數(shù)示例
這篇文章主要介紹了python用字典統(tǒng)計單詞或漢字詞個數(shù)示例,需要的朋友可以參考下2014-04-04

