python中異常的傳播詳解
1、異常的傳播
當(dāng)在函數(shù)中出現(xiàn)異常時(shí),如果在函數(shù)中對(duì)異常進(jìn)行了處理,則異常不會(huì)再繼續(xù)傳播。如果函數(shù)中沒(méi)有對(duì)異常進(jìn)行處理,則異常會(huì)繼續(xù)向函數(shù)調(diào)用者傳播。如果函數(shù)調(diào)用者處理了異常,則不再傳播,如果還沒(méi)有處理,則繼續(xù)向他的調(diào)用者傳播,直到傳遞到全局作用域(主模塊)如果依然沒(méi)有處理,則程序終止,并且顯示異常信息到控制臺(tái)。所以異常的傳播我們也稱(chēng)之為拋出異常。
異常傳播示例如下:
def fn1(): print('Hello fn') print(10/0) def fn2(): print('Hello fn2') fn() def fn3(): print('Hello fn3') fn2() fn3()
輸出結(jié)果:
說(shuō)明輸出結(jié)果:
當(dāng)我們調(diào)用fn3()
方法的時(shí)候,會(huì)先輸出Hello fn3
,再向下執(zhí)行調(diào)用fn2()
方法,以此類(lèi)推到fn1()
方法中??梢钥吹缴线呌腥龡l輸出語(yǔ)句。
當(dāng)執(zhí)行到fn1()
方法中print(10/0)
語(yǔ)句,出現(xiàn)了ZeroDivisionError
異常,而fn1()
方法中沒(méi)有處理該異常,則向他的調(diào)用者拋出這個(gè)異常,拋給了fn2()
方法,以此類(lèi)推,知道fn3()
方法拋給了全局作用域中的調(diào)用者,異常依然沒(méi)有被處理。
最后Python的解釋器會(huì)把這個(gè)異常顯示在控制臺(tái)中。
所以我們看到異常結(jié)果中,一行報(bào)錯(cuò),向上拋了好幾次。
例如:全局作用域中的代碼有異常沒(méi)有處理的話(huà),就直接顯示在控制臺(tái)中了。
print(10 / 0)
輸出結(jié)果:
2、如何處理異常
在異常拋出后的任何一個(gè)調(diào)用者處理該異常都可以。
異常處理如下:
def fn1(): print('Hello fn') print(10 / 0) def fn2(): print('Hello fn2') fn1() def fn3(): print('Hello fn3') fn2() try: fn3() except : print("異常我已經(jīng)處理過(guò)了。") """ 輸出結(jié)果: Hello fn3 Hello fn2 Hello fn 異常我已經(jīng)處理過(guò)了。 """ # 我在全局作用域的地方進(jìn)行了異常處理, # 也可以在其他地方進(jìn)行處理,不管在哪里處理, # 最后都不會(huì)把錯(cuò)誤拋向控制臺(tái)的。
提示:
當(dāng)程序運(yùn)行過(guò)程中出現(xiàn)異常以后,所有的異常信息會(huì)被保存一個(gè)專(zhuān)門(mén)的異常對(duì)象中。而異常傳播時(shí),實(shí)際上就是將異常對(duì)象拋給了調(diào)用者。
而不同的錯(cuò)誤,會(huì)對(duì)應(yīng)著不同的異常對(duì)象(也就是前邊說(shuō)的異常類(lèi)型)。
如何查看Python異常對(duì)象?
在Python的本地文檔中,找到[The Python Standard Library] —> [Built-in Exceptions],里面全是我們Python中的異常對(duì)象以及說(shuō)明。
如下圖所示:
到此這篇關(guān)于python中異常的傳播詳解的文章就介紹到這了,更多相關(guān)python異常傳播內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用pyecharts在jupyter notebook上繪圖
這篇文章主要介紹了使用pyecharts在jupyter notebook上繪圖,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-07-07pycharm打開(kāi)長(zhǎng)代碼文件CPU占用率過(guò)高的解決
這篇文章主要介紹了pycharm打開(kāi)長(zhǎng)代碼文件CPU占用率過(guò)高的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09

如何使用Python多線(xiàn)程測(cè)試并發(fā)漏洞

Python的Django框架中if標(biāo)簽的相關(guān)使用

Python中str.format()和f-string的使用

新手如何發(fā)布Python項(xiàng)目開(kāi)源包過(guò)程詳解