Python異常處理總結(jié)
本文較為詳細(xì)的羅列了Python常見的異常處理,供大家參考,具體如下:
1. 拋出異常和自定義異常
Python用異常對象(exception object)表示異常情況,遇到錯誤后,會引發(fā)異常。如果異常對象并未被處理或捕捉,程序就會用所謂的回溯(Traceback,一種錯誤信息)終止執(zhí)行。
①.raise 語句
Python中的raise 關(guān)鍵字用于引發(fā)一個異常,基本上和C#和Java中的throw關(guān)鍵字相同,如下所示:
# -- coding: utf-8 -- def ThorwErr(): raise Exception("拋出一個異常") # Exception: 拋出一個異常 ThorwErr()
raise關(guān)鍵字后面是拋出是一個通用的異常類型(Exception),一般來說拋出的異常越詳細(xì)越好,Python在exceptions模塊內(nèi)建了很多的異常類型,通過使用dir函數(shù)來查看exceptions中的異常類型,如下:
import exceptions # ['ArithmeticError', 'AssertionError'.....] print dir(exceptions)
傳遞異常
捕捉到了異常,但是又想重新引發(fā)它(傳遞異常),可以使用不帶參數(shù)的raise語句即可:
# -- coding: utf-8 -- 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
②.自定義異常類型
Python中也可以自定義自己的特殊類型的異常,只需要要從Exception類繼承(直接或間接)即可:
class SomeCustomException(Exception): pass
2. 捕捉異常
和C#中的try/catch類似,Python中使用try/except關(guān)鍵字來捕捉異常,如下:
# -- coding: utf-8 -- try: print 2/0 except ZeroDivisionError: print '除數(shù)不能為0'
①.捕捉多個異常
在一個except語句只捕捉其后聲明的異常類型,如果可能會拋出的是其他類型的異常就需要再增加一個except語句了,或者也可以指定一個更通用的異常類型比如:Exception,如下:
# -- coding: utf-8 -- try: print 2/'0' except ZeroDivisionError: print '除數(shù)不能為0' except Exception: print '其他類型異常'
為了捕獲多個異常,除了聲明多個except語句之外,還可以在一個except語句之后將多個異常作為元組列出來即可:
# -- coding: utf-8 -- try: print 2/'0' except (ZeroDivisionError,Exception): print '發(fā)生了一個異常'
②.獲取異常信息
每個異常都會有一些異常信息,一般情況下我們應(yīng)該把這些異常信息記錄下來:
# -- coding: utf-8 -- try: print 2/'0' except (ZeroDivisionError,Exception) as e: # unsupported operand type(s) for /: 'int' and 'str' print e
3. finally子句
finally子句和try子句聯(lián)合使用但是和except語句不同,finally不管try子句內(nèi)部是否有異常發(fā)生,都會執(zhí)行finally子句內(nèi)的代碼。所有一般情況下,finally自己常常用于關(guān)閉文件或者在Socket中。
# -- coding: utf-8 -- try: print 2/'0' except (ZeroDivisionError,Exception): print '發(fā)生了一個異常' finally: print '不管是否發(fā)生異常都執(zhí)行'
相關(guān)文章
Tkinter使用Progressbar創(chuàng)建和管理進(jìn)度條的操作代碼
Progressbar是Tkinter庫中的一個小部件,用于創(chuàng)建和管理進(jìn)度條,這篇文章主要介紹了Tkinter使用Progressbar創(chuàng)建和管理進(jìn)度條,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07Django+Celery實現(xiàn)動態(tài)配置定時任務(wù)的方法示例
這篇文章主要介紹了Django + Celery 實現(xiàn)動態(tài)配置定時任務(wù)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05matplotlib源碼解析標(biāo)題實現(xiàn)(窗口標(biāo)題,標(biāo)題,子圖標(biāo)題不同之間的差異)
這篇文章主要介紹了matplotlib源碼解析標(biāo)題實現(xiàn)(窗口標(biāo)題,標(biāo)題,子圖標(biāo)題不同之間的差異),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02OpenCV圖像形態(tài)學(xué)的實現(xiàn)
本文主要介紹了OpenCV圖像形態(tài)學(xué)的實現(xiàn),包括腐蝕、膨脹、開運算、閉運算、梯度運算、頂帽運算和黑帽運算,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04python實現(xiàn)list元素按關(guān)鍵字相加減的方法示例
這篇文章主要介紹了python實現(xiàn)list元素按關(guān)鍵字相加減的方法,結(jié)合具體實例形式分析了Python針對list元素遍歷與運算相關(guān)操作技巧,需要的朋友可以參考下2017-06-06python+selenium實現(xiàn)自動搶票功能實例代碼
Selenium是ThoughtWorks公司的一個強大的開源Web功能測試工具系列,采用Javascript來管理整個測試過程,包括讀入測試套件、執(zhí)行測試和記錄測試結(jié)果。這篇文章主要介紹了python+selenium實現(xiàn)自動搶票,需要的朋友可以參考下2018-11-11