聊聊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)文章
Python控制臺實現(xiàn)交互式環(huán)境執(zhí)行
這篇文章主要介紹了Python程序如何在交互式環(huán)境中執(zhí)行,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06Python數(shù)據(jù)分析之pandas讀取數(shù)據(jù)
Pandas讀取的文件主要有CSV,TXT和JSON,今天就整理了這3種文件格式的讀取和導(dǎo)出代碼,文中有非常詳細(xì)的代碼示例及介紹,需要的朋友可以參考下2021-06-06python與mysql數(shù)據(jù)庫交互的實現(xiàn)
這篇文章主要介紹了python與mysql數(shù)據(jù)庫交互的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01