網站首頁 編程語言 正文
一、拋出異常和自定義異常
Python中使用用異常對象(exception object)表示異常情況,當程序運行遇到錯誤后,就會觸發發異常。相信大家在編碼是都會遇到這種情況,那么如果異常對象并未被處理或捕捉,程序就會用報錯然后終止執行。
1、raise語句
Python中的raise
關鍵字用于觸發發一個異常,和我們熟悉的Java中的throw關鍵字相同,
如下所示:
>>>?? ?def ThorwErr(): >>> ?? ? raise Exception("拋出一個異常") >>>?? ?# Exception: 拋出一個異常 >>>?? ?ThorwErr()
如上raise
關鍵字后面是拋出是一個通用的異常類型(Exception),但是在實際編碼中我們拋出的異常越詳細越好。Python在exceptions
模塊內建了很多的異常類型,我們用dir函數來查看exceptions中都有哪些的異常類型,
如下:
>>>?? ?import exceptions >>>?? ?print dir(exceptions)
傳遞異常:
捕捉到了異常,要想重新引發它(傳遞異常),我們可以使用不帶參數的raise語句:
>>>?? ?class MuffledCalculator: >>> ?? ? muffled = False >>>?? ?def calc(self,expr): >>>?? ? ? ?try: >>> ?? ? ? ? return eval(expr) >>> ?? ? ? except ZeroDivisionError: >>> ??? ? ? ?if self.muffled: >>> ? ?? ? ? ? print 'Division by zero is illegal' >>> ??? ? ? ?else: >>> ??? ? ? ? ?raise
2、自定義異常類型
在Python
中我們也可以定義自己的特殊異常類型,只需要繼承Exception
類即可,這里的繼承既可以是直接繼承,也可以是間接繼承。
>>>?? ?class selfExceptions(Exception): >>>?? ??? ?pass
二、捕捉異常
和java
中的try/catch
相似,在Python中使用try/except捕捉異常
try: ? print 2/0 except ZeroDivisionError: ? print '除數不能為0'
1、捕捉多個異常
使用except
語句時我們只能捕捉其后聲明了的那個異常類型,如果代碼可能會拋出的是其他類型的異常,這時就需要再增加一個except語句了,
如下:
try: ? print 2/'0' except ZeroDivisionError: ? print '除數不能為0' except Exception: ? print '其他類型異常'
為了捕獲多個異常,除了聲明多個except語句之外,還可以在一個except語句之后將多個異常作為元組列出來即可:
try: ? print 2/'0' except (ZeroDivisionError,Exception): ? print '發生了一個異常'
2、獲取異常信息
每個異常都會有一些異常信息,我們可以把這些異常打印出來查看,便于修改代碼:
try: ? print 2/'0' except (ZeroDivisionError,Exception) as e: ? # unsupported operand type(s) for /: 'int' and 'str' ? print e
三、finally子句
和Java
中一樣,finally不管try子句內部是否有異常發生,都會執行finally
子句內的代碼。一般使用時,finally常常使用用于關閉文件或者在Socket
中。
try: ? print 2/'0' except (ZeroDivisionError,Exception): ? print '發生了一個異常' finally: ? print '不管是否發生異常都執行'
原文鏈接:https://blog.csdn.net/qq_45691220/article/details/123307366
相關推薦
- 2022-09-20 Winform使用FTP實現自動更新_C#教程
- 2022-10-08 Golang?Web?框架Iris安裝部署_Golang
- 2022-09-25 ECharts如何在pycharm中運行
- 2022-02-27 解決 idea突然使用debug功能時項目啟動一半卡住沒反應也不報錯
- 2022-08-06 C語言繪制簡單時鐘小程序_C 語言
- 2022-12-24 一文帶你輕松學會Go語言動態調用函數_Golang
- 2022-07-08 C#四種計時器Timer的區別和用法_C#教程
- 2023-03-15 React受控組件與非受控組件實例分析講解_React
- 最近更新
-
- 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同步修改后的遠程分支