六二,直方大,不習(xí)無(wú)不利。
在學(xué)習(xí)python中會(huì)經(jīng)常遇到各種異常事件;現(xiàn)歸納一下如何捕捉并處理這些異常;今天來(lái)給大家整理一下。
一、異常的概念
什么是異常?
異常即是一個(gè)事件,該事件會(huì)在程序執(zhí)行過(guò)程中發(fā)生,影響了程序的正常執(zhí)行。一般情況下,在Python無(wú)法正常處理程序時(shí)就會(huì)發(fā)生一個(gè)異常。異常是Python對(duì)象,表示一個(gè)錯(cuò)誤。當(dāng)Python腳本發(fā)生異常時(shí)我們需要捕獲處理它,否則程序會(huì)終止執(zhí)行。
三、出現(xiàn)異常的捕捉方法
異常處理
捕捉異??梢允褂胻ry/except語(yǔ)句。try/except語(yǔ)句用來(lái)檢測(cè)try語(yǔ)句塊中的錯(cuò)誤,從而讓except語(yǔ)句捕獲異常信息并處理。如果你不想在異常發(fā)生時(shí)結(jié)束你的程序,只需在try里捕獲它。
語(yǔ)法:
以下為簡(jiǎn)單的try….except…else的語(yǔ)法:
try的工作原理是,當(dāng)開(kāi)始一個(gè)try語(yǔ)句后,python就在當(dāng)前程序的上下文中作標(biāo)記,這樣當(dāng)異常出現(xiàn)時(shí)就可以回到這里,try子句先執(zhí)行,接下來(lái)會(huì)發(fā)生什么依賴(lài)于執(zhí)行時(shí)是否出現(xiàn)異常。
- 如果當(dāng)try后的語(yǔ)句執(zhí)行時(shí)發(fā)生異常,python就跳回到try并執(zhí)行第一個(gè)匹配該異常的except子句,異常處理完畢,控制流就通過(guò)整個(gè)try語(yǔ)句(除非在處理異常時(shí)又引發(fā)新的異常)。
- 如果在try后的語(yǔ)句里發(fā)生了異常,卻沒(méi)有匹配的except子句,異常將被遞交到上層的try,或者到程序的最上層(這樣將結(jié)束程序,并打印默認(rèn)的出錯(cuò)信息)。
- 如果在try子句執(zhí)行時(shí)沒(méi)有發(fā)生異常,python將執(zhí)行else語(yǔ)句后的語(yǔ)句(如果有else的話),然后控制流通過(guò)整個(gè)try語(yǔ)句。
實(shí)例
try 塊將生成異常,因?yàn)?x 未定義:
try: print(x)except: print(“An exception occurred”)
由于 try 塊引發(fā)錯(cuò)誤,因此會(huì)執(zhí)行 except 塊(如上圖所示)。
如果沒(méi)有 try 塊,程序?qū)⒈罎⒉⒁l(fā)錯(cuò)誤(如下圖所示)
多個(gè)異常
您可以根據(jù)需要定義任意數(shù)量的 exception 塊
實(shí)例
如果 try 塊引發(fā) NameError,則打印一條消息,如果是其他錯(cuò)誤則打印另一條消息:
try: print(x)except NameError: print(“Variable x is not defined”)except: print(“Something else went wrong”)
Else
如果沒(méi)有引發(fā)錯(cuò)誤,那么您可以使用 else 關(guān)鍵字來(lái)定義要執(zhí)行的代碼塊:
實(shí)例
在本例中,try 塊不會(huì)生成任何錯(cuò)誤:
try: print(“Hello”)except: print(“Something went wrong”)else: print(“Nothing went wrong”)
Finally
如果指定了 finally 塊,則無(wú)論 try 塊是否引發(fā)錯(cuò)誤,都會(huì)執(zhí)行 finally 塊。
實(shí)例
try: print(x)except: print(“Something went wrong”)finally: print(“The ‘try except’ is finished”)
以上是使用try方法捕捉處理異常的方法。
PS:我們也可以人為的自動(dòng)觸發(fā)異常
觸發(fā)異常我們可以使用raise語(yǔ)句自己觸發(fā)異常raise語(yǔ)法格式如下:
raise Exception (args ,traceback)
語(yǔ)句中 Exception 是異常的類(lèi)型(例如,NameError)參數(shù)標(biāo)準(zhǔn)異常中任一種,args 是自已提供的異常參數(shù)。最后一個(gè)參數(shù)是可選的(在實(shí)踐中很少使用),如果存在,是跟蹤異常對(duì)象。實(shí)例一個(gè)異??梢允且粋€(gè)字符串,類(lèi)或?qū)ο蟆?Python的內(nèi)核提供的異常,大多數(shù)都是實(shí)例化的類(lèi),這是一個(gè)類(lèi)的實(shí)例的參數(shù)。定義一個(gè)異常非常簡(jiǎn)單,如下所示:
def functionName( level ): if level < 1: raise Exception("Invalid level!", level)# 觸發(fā)異常后,后面的代碼就不會(huì)再執(zhí)行
注意:為了能夠捕獲異常,”except”語(yǔ)句必須有用相同的異常來(lái)拋出類(lèi)對(duì)象或者字符串。例如我們捕獲以上異常,”except”語(yǔ)句如下所示:
try: 正常邏輯except Exception(err): 觸發(fā)自定義異常else: 其余代碼# 定義函數(shù)def mye( level ): if level < 1: raise Exception("Invalid level!")try: mye(0)except Exception as err: print (1,err)else: print (2)