淺談Python的異常處理
Python的異常處理能力是很強(qiáng)大的,可向用戶準(zhǔn)確反饋出錯(cuò)信息。在Python中,異常也是對(duì)象,可對(duì)它進(jìn)行操作。所有異常都是基類Exception的成員。所有異常都從基類Exception繼承,而且都在exceptions模塊中定義。Python自動(dòng)將所有異常名稱放在內(nèi)建命名空間中,所以程序不必導(dǎo)入exceptions模塊即可使用異常。Python用異常對(duì)象(exception object)表示異常情況,遇到錯(cuò)誤后,會(huì)引發(fā)異常。如果異常對(duì)象并未被處理或捕捉,程序就會(huì)用所謂的回溯(Traceback,一種錯(cuò)誤信息)終止執(zhí)行。
注意:雖然大多數(shù)錯(cuò)誤會(huì)導(dǎo)致異常,但一個(gè)異常不一定代表錯(cuò)誤,有時(shí)候它們只是一個(gè)警告,有時(shí)候它們可能是一個(gè)終止信號(hào),比如退出循環(huán)等。
一.與python異常相關(guān)的關(guān)鍵字
raise:手動(dòng)拋出/引發(fā)異常:raise [exception[,data]
try/except:捕獲異常并處理
pass:忽略異常
as:定義異常實(shí)例(except IOError as e)
finally:無(wú)論是否出現(xiàn)異常,都執(zhí)行的代碼]
else:如果try中的語(yǔ)句沒(méi)有引發(fā)異常,則執(zhí)行else中的語(yǔ)句
except Exception as error:
二.python中的異常類型
1.StandardError類:如果程序上出現(xiàn)邏輯錯(cuò)誤, 將引發(fā)該異常。StandardError類是所有內(nèi)斂異常的基類,放置在默認(rèn)的命名空間中,因此使用IOEroor, EOFError, ImportError等類,不需要導(dǎo)入exception模塊。
StopIteration類:判斷循環(huán)是否執(zhí)行到尾部,如果循環(huán)到尾部,則拋出該異常。
GeneratorExit類:是由Generator函數(shù)引發(fā)的異常,當(dāng)調(diào)用close()時(shí)引發(fā)該異常。
Warning類:表示程序中的代碼引起的警告。
三.基本方式:
1.try:
語(yǔ)句1
except [exception1(,exception2...),[data…]]:
語(yǔ)句2
else:
語(yǔ)句3
該種異常處理語(yǔ)法的規(guī)則是:
· 執(zhí)行try下的語(yǔ)句,如果引發(fā)異常,則執(zhí)行過(guò)程會(huì)跳到第一個(gè)except語(yǔ)句。
· 如果第一個(gè)except中定義的異常與引發(fā)的異常匹配,則執(zhí)行該except中的語(yǔ)句。
· 如果引發(fā)的異常不匹配第一個(gè)except,則會(huì)搜索第二個(gè)except,允許編寫的except數(shù)量沒(méi)有限制。
· 如果所有的except都不匹配,則異常會(huì)傳遞到下一個(gè)調(diào)用本代碼的最高層try代碼中。
· 如果沒(méi)有發(fā)生異常,則執(zhí)行else塊代碼。
import traceback try: 1/0 except Exception as err: print(err) try: f = open("file.txt","r") except IOError as e: print(e) try: f = open("file.txt","r") except Exception as e: print(e)
最后兩個(gè)的輸出是一模一樣的---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.try:
語(yǔ)句1
finally:
語(yǔ)句2
該語(yǔ)句的執(zhí)行規(guī)則是:
· 執(zhí)行try下的代碼。
· 如果發(fā)生異常,在該異常傳遞到下一級(jí)try時(shí),執(zhí)行finally中的代碼。
· 如果沒(méi)有發(fā)生異常,則執(zhí)行finally中的代碼。
第二種try語(yǔ)法在無(wú)論有沒(méi)有發(fā)生異常都要執(zhí)行代碼的情況下是很有用的。例如我們?cè)趐ython中打開一個(gè)文件進(jìn)行讀寫操作,我在操作過(guò)程中不管是否出現(xiàn)異常,最終都是要把該文件關(guān)閉的。這兩種形式相互沖突,使用了一種就不允許使用另一種,而功能又各異
所以,一般情況下,finally里面執(zhí)行的都是一些清理工作,比如:關(guān)閉文件描述符,釋放鎖等
注意,finally中,如果出現(xiàn)異常,外部如果沒(méi)有相應(yīng)的捕獲機(jī)制,該異常會(huì)層層拋出,直到最頂端,然后解釋器停止。一般在外層再加一次try except異常捕獲
三.手動(dòng)使用raise引發(fā)異常
1.raise [exception[,data]]
2.在Python中,要想引發(fā)異常,最簡(jiǎn)單的形式就是輸入關(guān)鍵字raise,后跟要引發(fā)的異常的名稱。異常名稱標(biāo)識(shí)出具體的類:Python異常是那些類的對(duì)象。執(zhí)行raise語(yǔ)句時(shí),Python會(huì)創(chuàng)建指定的異常類的一個(gè)對(duì)象。raise語(yǔ)句還可指定對(duì)異常對(duì)象進(jìn)行初始化的參數(shù)。為此,請(qǐng)?jiān)诋惓n惖拿Q后添加一個(gè)逗號(hào)以及指定的參數(shù)(或者由參數(shù)構(gòu)成的一個(gè)元組)。
3.實(shí)例:
try: print("開始測(cè)試") raise IOError except IOError: print("定義好的錯(cuò)誤") except: print("別的錯(cuò)誤")
相關(guān)文章
python繪制發(fā)散型柱狀圖+誤差陰影時(shí)間序列圖+雙坐標(biāo)系時(shí)間序列圖+繪制金字塔圖
這篇文章主要介紹了python繪制發(fā)散型柱狀圖+誤差陰影時(shí)間序列圖+雙坐標(biāo)系時(shí)間序列圖+繪制金字塔圖,詳細(xì)的內(nèi)容需要的小伙伴可以參考一下下面文章內(nèi)容2022-08-08python控制windows剪貼板,向剪貼板中寫入圖片的實(shí)例
今天小編就為大家分享一篇python控制windows剪貼板,向剪貼板中寫入圖片的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Python RobotFramework的安裝過(guò)程及應(yīng)用實(shí)戰(zhàn)教程
這篇文章主要介紹了RobotFramework的安裝過(guò)程及應(yīng)用實(shí)戰(zhàn)教程,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08python并發(fā)編程多進(jìn)程之守護(hù)進(jìn)程原理解析
這篇文章主要介紹了python并發(fā)編程多進(jìn)程之守護(hù)進(jìn)程原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python3 實(shí)現(xiàn)串口兩進(jìn)程同時(shí)讀寫
今天小編就為大家分享一篇Python3 實(shí)現(xiàn)串口兩進(jìn)程同時(shí)讀寫,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06Pandas數(shù)據(jù)類型之category的用法
Pandas中有一種特殊的數(shù)據(jù)類型叫做category.它表示的是一個(gè)類別,一般用在統(tǒng)計(jì)分類中,比如性別,血型,分類,級(jí)別等等.有點(diǎn)像java中的enum,今天給大家詳細(xì)講解一下category的用法,需要的朋友可以參考下2021-06-06Python datetime庫(kù)函數(shù)的示例詳解
datetime?是 Python 內(nèi)置的日期時(shí)間處理庫(kù),它包含了處理日期、時(shí)間、時(shí)間間隔等的類和函數(shù),這篇文章主要介紹了Python datetime庫(kù)函數(shù)的詳解,需要的朋友可以參考下2023-07-07python的三目運(yùn)算符和not in運(yùn)算符使用示例
這篇文章主要介紹了python的三目運(yùn)算符和not in運(yùn)算符使用示例,需要的朋友可以參考下2014-03-03python 控制Asterisk AMI接口外呼電話的例子
今天小編就為大家分享一篇python 控制Asterisk AMI接口外呼電話的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08