網站首頁 編程語言 正文
①捕捉一個異常
捕捉一個異常
以用0作為除數會得到ZeroDivisionError異常為例,
print(1/0)
為例程序的持續執行,不因該異常而中止,
遂對該異常進行處理,使異常時輸出該異常內容:
try: print(1/0) except ZeroDivisionError as e: print(e)
②捕捉多個異常
捕捉指定的多個異常,以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)
③Exception捕捉所有異常
如果異常的種類不確定,則可以使用Exception來指代所有種類的異常。
以一個數值和一個字符串相加為例:
try: print(1 + 'strstrstr') except Exception as e: print(e)
④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("請把代碼拿回重寫。")
⑤ 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-03-16 Linux系統中日志詳細介紹_Linux
- 2022-11-24 Linux使用iptables實現屏蔽ip地址的示例詳解_linux shell
- 2023-11-12 python 列表、字典、元組與集合的特點以及對比
- 2022-06-20 Python基于DFA算法實現內容敏感詞過濾_python
- 2022-07-25 .Net行為型設計模式之訪問者模式(Visitor)_基礎應用
- 2023-07-04 spring boot security之前后端分離配置
- 2022-08-01 Flask-SQLALchemy基本使用方法_python
- 2022-02-11 小程序如何把參數設置為全局變量
- 最近更新
-
- 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同步修改后的遠程分支