您好,登錄后才能下訂單哦!
這篇文章運(yùn)用簡單易懂的例子給大家介紹 Python運(yùn)行出現(xiàn)異常如何處理,代碼非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
首先,程序在運(yùn)行的過程中,產(chǎn)生了異常,這時,我們可能會有兩種想法,第一種是針對這個異常做某些特殊的處理來進(jìn)行程序的降級處理;第二種是希望程序忽略這個異常繼續(xù)執(zhí)行下去,這個異常可能并不干擾主邏輯的執(zhí)行。
那這個時候我們怎么辦呢?
有編程經(jīng)驗(yàn)的同學(xué)馬上就想到了,那我們?nèi)?try 它啊,在 Python 中,我們同樣可以去 try 它,從字面意思上理解就已經(jīng)非常清晰明確了,以下的內(nèi)容是要嘗試執(zhí)行的。
語法:
try: ...(可能產(chǎn)生異常的代碼) except: ...(產(chǎn)生異常后的處理代碼)
但是,還會有一種情況,不管上面的代碼有沒有出錯,有一部分代碼我們總希望它能執(zhí)行,這時,我們可以添加另一個關(guān)鍵字 finally 。
從字面意思可以就可以看出來,這個是最后要執(zhí)行的意思。
語法:
try: ...(可能產(chǎn)生異常的代碼) except: ...(產(chǎn)生異常后的處理代碼) finally: ...(一定要執(zhí)行的代碼)
下面開始我們今天的代碼演示。
我們先擬定一個場景,我們定義一個除法函數(shù),如果除數(shù)不為 0 ,是可以正常返回值的,如果除數(shù)為 0 ,那么整個程序肯定會直接異常報錯。
def division(x, y): try: return x / y except: print('程序報錯啦?。?!') return None print(division(15, 5))
輸出結(jié)果如下:
3.0
這時程序是可以正常輸出的,這時我們修改一下調(diào)用的參數(shù),改為 division(15, 0) ,看下輸出結(jié)果:
程序報錯啦?。?! None
可以看到,這里打印了我在程序中設(shè)置的 None ,并沒有之前的紅色的異常信息拋出。這里的 except 會捕捉我們所有的異常信息,但是,異常信息也是有很多分類的,比如我們之前遇到過的訪問字典中不存在的 key 的異常 KeyError ,比如我們剛才捕捉到的 ZeroDivisionError 異常,還有也是我們之前遇到過的數(shù)組下標(biāo)越界的異常 IndexError 。
比如這里的代碼我可以捕捉更加詳細(xì)的異常信息 ZeroDivisionError 。
def division1(x, y): try: return x / y except ZeroDivisionError: print('程序報錯啦?。。?#39;) return None print(division1(15, 0))
輸出結(jié)果如下:
程序報錯啦?。?! None
那么,看到這里,你可能會有一個疑問,我們?yōu)槭裁匆獙Ξ惓7诸悾苯幼ト∷挟惓2皇歉奖忝矗?/p>
當(dāng)然,對于邏輯比較簡單的程序,直接捕捉所有異常是更方便的,但是在某些特定的業(yè)務(wù)場景下,一段程序可能會拋出多種異常,我們希望根據(jù)異常種類的不同,定制不同的解決方案,至少我們知道當(dāng)前的程序是拋出了什么異常,這時,程序異常分類就顯得尤為重要。
我們這里演示一下,如果我們輸出的值不是數(shù)字,是字符串的話。。。。
def division2(x, y): try: return x / y except ZeroDivisionError: print('您輸出的除數(shù)為 0 ?。。?#39;) return None except TypeError: print('您輸出的參數(shù)類型非法?。。?#39;) return None print(division2('python', 0))
輸出結(jié)果如下:
您輸出的參數(shù)類型非法?。?! None
對的,你沒有看錯,異常信息是能捕捉多個的,是可以并排寫的。至于先拋出那個,就要看那個異常先發(fā)生了。
因?yàn)槭纠a的邏輯過于簡單,異常拋出順序無法演示,請各位同學(xué)見諒(li zhi qi zhuang)。
上面我們還提到了 finally ,我們接著來演示 finally 這個關(guān)鍵字的使用。
def division3(x, y): try: return x / y except ZeroDivisionError: print('您輸出的除數(shù)為 0 ?。?!') return None except TypeError: print('您輸出的參數(shù)類型非法!?。?#39;) return None finally: print('你一定能看到我?。?!') print(division3(15, 3)) print(division3('python', 0))
可以看到,這里我使用有異常和正常無任何問題的數(shù)據(jù)進(jìn)行測試,結(jié)果如下:
你一定能看到我?。?! 5.0 您輸出的參數(shù)類型非法!??! 你一定能看到我!??! None
確實(shí), finally 中的內(nèi)容是能正常打印的,這里多提一句,這里經(jīng)常的使用方式是來關(guān)閉一些 I/O 讀寫操作或者一些外部連接,如數(shù)據(jù)庫、緩存服務(wù)等。
關(guān)于 Python運(yùn)行出現(xiàn)異常如何處理就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。