網(wǎng)站首頁 編程語言 正文
1、異常的傳播
當在函數(shù)中出現(xiàn)異常時,如果在函數(shù)中對異常進行了處理,則異常不會再繼續(xù)傳播。如果函數(shù)中沒有對異常進行處理,則異常會繼續(xù)向函數(shù)調(diào)用者傳播。如果函數(shù)調(diào)用者處理了異常,則不再傳播,如果還沒有處理,則繼續(xù)向他的調(diào)用者傳播,直到傳遞到全局作用域(主模塊)如果依然沒有處理,則程序終止,并且顯示異常信息到控制臺。所以異常的傳播我們也稱之為拋出異常。
異常傳播示例如下:
def fn1(): print('Hello fn') print(10/0) def fn2(): print('Hello fn2') fn() def fn3(): print('Hello fn3') fn2() fn3()
輸出結(jié)果:
說明輸出結(jié)果:
當我們調(diào)用fn3()
方法的時候,會先輸出Hello fn3
,再向下執(zhí)行調(diào)用fn2()
方法,以此類推到fn1()
方法中。可以看到上邊有三條輸出語句。
當執(zhí)行到fn1()
方法中print(10/0)
語句,出現(xiàn)了ZeroDivisionError
異常,而fn1()
方法中沒有處理該異常,則向他的調(diào)用者拋出這個異常,拋給了fn2()
方法,以此類推,知道fn3()
方法拋給了全局作用域中的調(diào)用者,異常依然沒有被處理。
最后Python的解釋器會把這個異常顯示在控制臺中。
所以我們看到異常結(jié)果中,一行報錯,向上拋了好幾次。
例如:全局作用域中的代碼有異常沒有處理的話,就直接顯示在控制臺中了。
print(10 / 0)
輸出結(jié)果:
2、如何處理異常
在異常拋出后的任何一個調(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)處理過了。") """ 輸出結(jié)果: Hello fn3 Hello fn2 Hello fn 異常我已經(jīng)處理過了。 """ # 我在全局作用域的地方進行了異常處理, # 也可以在其他地方進行處理,不管在哪里處理, # 最后都不會把錯誤拋向控制臺的。
提示:
當程序運行過程中出現(xiàn)異常以后,所有的異常信息會被保存一個專門的異常對象中。而異常傳播時,實際上就是將異常對象拋給了調(diào)用者。
而不同的錯誤,會對應著不同的異常對象(也就是前邊說的異常類型)。
如何查看Python異常對象?
在Python的本地文檔中,找到[The Python Standard Library] —> [Built-in Exceptions],里面全是我們Python中的異常對象以及說明。
如下圖所示:
原文鏈接:https://www.cnblogs.com/liuyuelinfighting/p/15845826.html
相關推薦
- 2022-02-17 Springboot 獲取響應信息,修改響應信息
- 2022-08-01 go中import包的大坑解決方案_Golang
- 2022-11-25 詳解C++中類的六大默認成員函數(shù)_C 語言
- 2022-06-08 Spring Cloud Ribbon 負載均衡器
- 2022-07-17 關于elasticsearch連接時斷時續(xù)以及Kibana出現(xiàn)server is not ready
- 2022-10-17 C++右值引用與move和forward函數(shù)的使用詳解_C 語言
- 2022-08-02 Python面試之os.system()和os.popen()的區(qū)別詳析_python
- 2022-07-14 利用Matlab實現(xiàn)圖像亮度分布統(tǒng)計圖_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支