網站首頁 編程語言 正文
1 捕捉一個異常
捕捉一個異常 以用0作為除數會得到ZeroDivisionError異常為例,
print(1/0)
為例程序的持續執行,不因該異常而中止, 遂對該異常進行處理,使異常時輸出該異常內容:
try: print(1/0) except ZeroDivisionError as e: print(e)
2 捕捉多個異常
捕捉指定的多個異常,以ZeroDivisionError和TypeError為例。 應用情景:
①可以用于捕捉指定的幾種對我們程序需求有用的異常,產生這些異常時我們去執行相應的操作。
②指定幾種不影響程序最終需求并可以忽略掉的異常。產生該異常時將其忽略,如果產生其他異常,則才是需要再進行調試處理的。
for i in range(2): print(i) try: if i == 0: print(1/0) else: print(1 + 'str') except (ZeroDivisionError, TypeError) as e: print(e)
3 Exception捕捉所有異常
如果異常的種類不確定,則可以使用Exception來指代所有種類的異常。
以一個數值和一個字符串相加為例:
try: print(1 + 'strstrstr') except Exception as e: print(e)
4 raise主動觸發異常
可以使用raise關鍵字來主動觸發異常,并可以在括號內加入對該異常的說明。執行效果如圖所示:
raise ZeroDivisionError("這是一個非常非常非常、很大很大很大的異常。。。")
raise可用于創建自己的異常類,用于定義新的異常。 當程序觸發了某種條件(if True),則raise一個定義好的異常
如定義一個名為DangerousError的異常:
class DangerousError(Exception): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg if True: raise DangerousError("異常警告!異常警告!異常警告!異常警告!異常警告!\n異常警告!異常警告!異常警告!異常警告!異常警告!") else: raise DangerousError("請把代碼拿回重寫。")
5 try…except…else…finally 邏輯
- try后邊是要處理的部分
- 如果try部分觸發的異常的名字在except后邊(或Exception),則執行Exception后邊的代碼;
- except可以有多個,且沒有數量限制,匹配的時候回從第一個開始依次往下匹配;
- 如果有觸發異常,但該異常不被except所匹配,則還是會報錯;
class DangerousError(Exception): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg AError = DangerousError("犯了DangerousErrorA錯誤") BError = DangerousError("犯了DangerousErrorB錯誤") CError = DangerousError("犯了DangerousErrorC錯誤") Elist = [AError, BError, CError, TypeError('1233211234567')] for i in range(4): print(i) try: raise Elist[i] except DangerousError as e: print(e)
如圖,前三個異常被處理,第四個異常沒有被處理,產生報錯。
當try后邊的代碼沒有被發現有異常時,則執行else后邊的代碼。
for i in range(4): try: print(i) except DangerousError: print("異常產生。") else: print("一切正常。")
不論異常處理結果如何,finally后邊的代碼一定會執行。 即使
for i in range(4): try: if i < 3: print(i) else: print(i) raise AError except DangerousError: print("異常產生。") else: print("一切正常。") finally: print("異常處理完成。")
當try…except部分檢測到不匹配的異常時,程序在運行finally后結束執行,報出異常:
以該例為例,第二個異常TypeError(‘1233211234567')與DangerousError不匹配。 所以循環只執行了兩次,并在輸出了兩次"處理完成。"后程序結束。 最外層的print(“hello world!”)始終不被執行。
Elist = [AError, TypeError('1233211234567'), BError, CError] for i in range(4): print(i) try: raise Elist[i] except DangerousError as e: print(e) finally: print("處理完成。") print("hello world!")
原文鏈接:https://blog.csdn.net/weixin_48964486/article/details/123190018
相關推薦
- 2022-11-18 C語言手寫多級時間輪定時器_C 語言
- 2022-08-15 element中this.$confirm的用法,element-ui MessageBox 彈框怎
- 2022-08-17 R語言學習VennDiagram包繪制韋恩圖示例_R語言
- 2023-06-18 C#?整數轉二進制字符串方式_C#教程
- 2022-03-24 C語言指針的圖文詳解_C 語言
- 2022-04-09 SpringBoot 集成MyBatis-Plus提示反序列化異常:cannot deseriali
- 2022-05-07 Python?識別錄音并轉為文字的實現_python
- 2022-08-17 C語言超全面覆蓋操作符知識點_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支