如何在Python中進(jìn)行異常處理
一、拋出異常和自定義異常
Python中使用用異常對(duì)象(exception object)表示異常情況,當(dāng)程序運(yùn)行遇到錯(cuò)誤后,就會(huì)觸發(fā)發(fā)異常。相信大家在編碼是都會(huì)遇到這種情況,那么如果異常對(duì)象并未被處理或捕捉,程序就會(huì)用報(bào)錯(cuò)然后終止執(zhí)行。
1、raise語(yǔ)句
Python中的raise 關(guān)鍵字用于觸發(fā)發(fā)一個(gè)異常,和我們熟悉的Java中的throw關(guān)鍵字相同,
如下所示:
>>>?? ?def ThorwErr():
>>> ?? ? raise Exception("拋出一個(gè)異常")
>>>?? ?# Exception: 拋出一個(gè)異常
>>>?? ?ThorwErr()如上raise關(guān)鍵字后面是拋出是一個(gè)通用的異常類型(Exception),但是在實(shí)際編碼中我們拋出的異常越詳細(xì)越好。Python在exceptions模塊內(nèi)建了很多的異常類型,我們用dir函數(shù)來(lái)查看exceptions中都有哪些的異常類型,
如下:
>>>?? ?import exceptions >>>?? ?print dir(exceptions)
傳遞異常:
捕捉到了異常,要想重新引發(fā)它(傳遞異常),我們可以使用不帶參數(shù)的raise語(yǔ)句:
>>>?? ?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、捕捉多個(gè)異常
使用except語(yǔ)句時(shí)我們只能捕捉其后聲明了的那個(gè)異常類型,如果代碼可能會(huì)拋出的是其他類型的異常,這時(shí)就需要再增加一個(gè)except語(yǔ)句了,
如下:
try: ? print 2/'0' except ZeroDivisionError: ? print '除數(shù)不能為0' except Exception: ? print '其他類型異常'
為了捕獲多個(gè)異常,除了聲明多個(gè)except語(yǔ)句之外,還可以在一個(gè)except語(yǔ)句之后將多個(gè)異常作為元組列出來(lái)即可:
try: ? print 2/'0' except (ZeroDivisionError,Exception): ? print '發(fā)生了一個(gè)異常'
2、獲取異常信息
每個(gè)異常都會(huì)有一些異常信息,我們可以把這些異常打印出來(lái)查看,便于修改代碼:
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ā)生,都會(huì)執(zhí)行finally子句內(nèi)的代碼。一般使用時(shí),finally常常使用用于關(guān)閉文件或者在Socket中。
try: ? print 2/'0' except (ZeroDivisionError,Exception): ? print '發(fā)生了一個(gè)異常' finally: ? print '不管是否發(fā)生異常都執(zhí)行'
到此這篇關(guān)于如何在Python中進(jìn)行異常處理的文章就介紹到這了,更多相關(guān)Python中進(jìn)行異常處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的古詩(shī)生成器
這篇文章主要為大家詳細(xì)介紹了基于循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的古詩(shī)生成器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
python使用numpy尋找二維數(shù)組的最值及其下標(biāo)方法分析
這篇文章主要為大家介紹了python使用numpy尋找二維數(shù)組的最值及其下標(biāo)實(shí)現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
python?包實(shí)現(xiàn)JSON?輕量數(shù)據(jù)操作
這篇文章主要介紹了python?包實(shí)現(xiàn)JSON?輕量數(shù)據(jù)操作,文章介紹內(nèi)容首先將對(duì)象轉(zhuǎn)為json字符串展開(kāi)主題詳細(xì)內(nèi)容需要的小伙伴可以參考一下2022-04-04
python 搭建簡(jiǎn)單的http server,可直接post文件的實(shí)例
今天小編就為大家分享一篇python 搭建簡(jiǎn)單的http server,可直接post文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
python實(shí)現(xiàn)貪吃蛇雙人大戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)貪吃蛇雙人大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
利用Python實(shí)現(xiàn)Excel的文件間的數(shù)據(jù)匹配功能
這篇文章主要介紹了利用Python實(shí)現(xiàn)Excel的文件間的數(shù)據(jù)匹配,本文通過(guò)一個(gè)函數(shù)實(shí)現(xiàn)此功能,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
詳談python中冒號(hào)與逗號(hào)的區(qū)別
下面小編就為大家分享一篇詳談python中冒號(hào)與逗號(hào)的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Pandas實(shí)現(xiàn)列(column)排序的幾種方法
Pandas是一種高效的數(shù)據(jù)處理庫(kù),在數(shù)據(jù)處理過(guò)程中,咱們經(jīng)常需要將列按照一定的要求進(jìn)行排序,本文就來(lái)介紹一下Pandas實(shí)現(xiàn)列(column)排序的幾種方法,感興趣的可以了解一下2023-11-11
python 監(jiān)控服務(wù)器是否有人遠(yuǎn)程登錄(詳細(xì)思路+代碼)
這篇文章主要介紹了python 監(jiān)控服務(wù)器是否有人遠(yuǎn)程登錄的方法,幫助大家利用python 監(jiān)控服務(wù)器,感興趣的朋友可以了解下2020-12-12

