如何在Python中進(jìn)行異常處理
一、拋出異常和自定義異常
Python中使用用異常對象(exception object)表示異常情況,當(dāng)程序運行遇到錯誤后,就會觸發(fā)發(fā)異常。相信大家在編碼是都會遇到這種情況,那么如果異常對象并未被處理或捕捉,程序就會用報錯然后終止執(zhí)行。
1、raise語句
Python中的raise
關(guān)鍵字用于觸發(fā)發(fā)一個異常,和我們熟悉的Java中的throw關(guān)鍵字相同,
如下所示:
>>>?? ?def ThorwErr(): >>> ?? ? raise Exception("拋出一個異常") >>>?? ?# Exception: 拋出一個異常 >>>?? ?ThorwErr()
如上raise
關(guān)鍵字后面是拋出是一個通用的異常類型(Exception),但是在實際編碼中我們拋出的異常越詳細(xì)越好。Python在exceptions
模塊內(nèi)建了很多的異常類型,我們用dir函數(shù)來查看exceptions中都有哪些的異常類型,
如下:
>>>?? ?import exceptions >>>?? ?print dir(exceptions)
傳遞異常:
捕捉到了異常,要想重新引發(fā)它(傳遞異常),我們可以使用不帶參數(shù)的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 '除數(shù)不能為0'
1、捕捉多個異常
使用except
語句時我們只能捕捉其后聲明了的那個異常類型,如果代碼可能會拋出的是其他類型的異常,這時就需要再增加一個except語句了,
如下:
try: ? print 2/'0' except ZeroDivisionError: ? print '除數(shù)不能為0' except Exception: ? print '其他類型異常'
為了捕獲多個異常,除了聲明多個except語句之外,還可以在一個except語句之后將多個異常作為元組列出來即可:
try: ? print 2/'0' except (ZeroDivisionError,Exception): ? print '發(fā)生了一個異常'
2、獲取異常信息
每個異常都會有一些異常信息,我們可以把這些異常打印出來查看,便于修改代碼:
try: ? print 2/'0' except (ZeroDivisionError,Exception) as e: ? # unsupported operand type(s) for /: 'int' and 'str' ? print e
三、finally子句
和Java
中一樣,finally不管try子句內(nèi)部是否有異常發(fā)生,都會執(zhí)行finally
子句內(nèi)的代碼。一般使用時,finally常常使用用于關(guān)閉文件或者在Socket
中。
try: ? print 2/'0' except (ZeroDivisionError,Exception): ? print '發(fā)生了一個異常' finally: ? print '不管是否發(fā)生異常都執(zhí)行'
到此這篇關(guān)于如何在Python中進(jìn)行異常處理的文章就介紹到這了,更多相關(guān)Python中進(jìn)行異常處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實現(xiàn)簡單神經(jīng)網(wǎng)絡(luò)算法
這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)簡單神經(jīng)網(wǎng)絡(luò)算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03matplotlib.pyplot.plot()參數(shù)使用詳解
這篇文章主要介紹了matplotlib.pyplot.plot()參數(shù)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07matplotlib相關(guān)系統(tǒng)目錄獲取方式小結(jié)
這篇文章主要介紹了matplotlib相關(guān)系統(tǒng)目錄獲取方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Pandas實現(xiàn)批量拆分與合并Excel的示例代碼
這篇文章主要為大家詳細(xì)講講如何利用python Pandas實現(xiàn)批量拆分與合并Excel,文中有非常詳細(xì)的的代碼示例,對正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下2022-05-05利用Fn.py庫在Python中進(jìn)行函數(shù)式編程
這篇文章主要介紹了利用Fn.py庫在Python中進(jìn)行函數(shù)式編程,基于Scala中的類似風(fēng)格,需要的朋友可以參考下2015-04-04總結(jié)Python函數(shù)參數(shù)的六種類型
這篇文章主要總結(jié)了Python函數(shù)參數(shù)的六種類型,傳遞參數(shù)實現(xiàn)不同場景的靈活使用,下面總結(jié)的六種函數(shù)參數(shù)類型,需要的小伙伴可以參考一下2022-03-03