Python中異常捕獲與處理的方法總結(jié)
Python異常是在程序執(zhí)行時(shí)發(fā)生的錯(cuò)誤,可能會(huì)導(dǎo)致程序終止運(yùn)行。
在Python中,異常處理是一種機(jī)制,它允許開(kāi)發(fā)人員在程序發(fā)生異常時(shí)捕獲、處理和報(bào)告這些異常,以便程序可以繼續(xù)運(yùn)行或在出現(xiàn)異常時(shí)進(jìn)行優(yōu)雅的退出。
在Python中,異??梢允菢?biāo)準(zhǔn)異常(例如SyntaxError和TypeError)或自定義異常。標(biāo)準(zhǔn)異常是由Python內(nèi)部定義的,而自定義異常是由開(kāi)發(fā)人員定義的,通常用于特定的應(yīng)用程序或庫(kù)。
以下是一些常見(jiàn)的Python異常:
- SyntaxError:語(yǔ)法錯(cuò)誤,通常是由于語(yǔ)法錯(cuò)誤導(dǎo)致的,如缺少括號(hào)、冒號(hào)等。
- TypeError:類型錯(cuò)誤,通常是由于將不同類型的對(duì)象組合在一起而引起的,如將字符串和數(shù)字相加。
- ValueError:值錯(cuò)誤,通常是由于提供的值不符合預(yù)期的范圍或格式而引起的,如將字符串轉(zhuǎn)換為整數(shù)時(shí)提供的字符串無(wú)效。
- IndexError:索引錯(cuò)誤,通常是由于嘗試訪問(wèn)列表或元組中不存在的元素而引起的。
- KeyError:鍵錯(cuò)誤,通常是由于嘗試訪問(wèn)字典中不存在的鍵而引起的。
- IOError:輸入/輸出錯(cuò)誤,通常是由于嘗試讀取或?qū)懭胛募r(shí)出現(xiàn)問(wèn)題而引起的。
- AttributeError:屬性錯(cuò)誤,通常是由于嘗試訪問(wèn)對(duì)象不存在的屬性或方法而引起的。
在Python中,可以使用try-except語(yǔ)句來(lái)捕獲異常并處理它們。try語(yǔ)句包含可能會(huì)導(dǎo)致異常的代碼,而except語(yǔ)句定義了在捕獲異常時(shí)要執(zhí)行的代碼。
可以使用多個(gè)except語(yǔ)句來(lái)捕獲不同類型的異常,try-except 還可以跟else 進(jìn)行搭配,它的含義就是當(dāng) try 語(yǔ)句沒(méi)有檢測(cè)到任何異常的情況下,就執(zhí)行 else 語(yǔ)句的內(nèi)容,另外也可以使用finally語(yǔ)句定義在try語(yǔ)句塊之后始終要執(zhí)行的代碼。
例如:
案例1:使用try-except語(yǔ)句來(lái)捕獲異常并處理它們
舉例:
try:
100/0 # 可能會(huì)導(dǎo)致異常的代碼
except ZeroDivisionError: #(捕獲特定的異常類型ZeroDivisionError,ZeroDivisionError是Python中的內(nèi)置異常類之一,用于表示在除數(shù)為零的情況下進(jìn)行了除法操作所引發(fā)的異常。)
print('因?yàn)檫@里打印出異常類型:除數(shù)不能為0。')# 處理值錯(cuò)誤的代碼

案例2:使用try-except語(yǔ)句搭配else語(yǔ)句(當(dāng) try 語(yǔ)句沒(méi)有檢測(cè)到任何異常的情況下,就執(zhí)行 else 語(yǔ)句的內(nèi)容)
當(dāng) try 語(yǔ)句檢測(cè)到任何異常的情況下,則不執(zhí)行else 語(yǔ)句的內(nèi)容
>>> try:
... 1 / 0
... except:
... print("逮到了~")
... else:
... print("沒(méi)逮到~")
...逮到了~
如果在 try 語(yǔ)句中檢測(cè)到異常,那么就執(zhí)行 except 語(yǔ)句的異常處理內(nèi)容:
>>> try:
... 1 / 1
... except:
... print("逮到了~")
... else:
... print("沒(méi)逮到~")
...
1.0沒(méi)逮到~
案例3:使用try-except語(yǔ)句搭配finally語(yǔ)句(無(wú)論異常發(fā)生與否,都必須要執(zhí)行的語(yǔ)句finally語(yǔ)句)
舉例:
try:
‘abc’+ 123
except TypeError: #TypeError為類型錯(cuò)誤,通常是由于將不同類型的對(duì)象組合在一起而引起的,如將字符串和數(shù)字相加。
print('因?yàn)檫@里打印出異常類型:類型錯(cuò)誤。')# 處理類型錯(cuò)誤的代碼
finally:
print('不論是否無(wú)法異常,都執(zhí)行這句話') # 無(wú)論是否發(fā)生異常都會(huì)執(zhí)行的代碼
異常處理是Python中的重要概念之一,開(kāi)發(fā)人員應(yīng)該了解如何正確地捕獲和處理異常,以確保程序的穩(wěn)定性和可靠性。
進(jìn)階:捕獲異常的方法
捕獲異常的兩種方法:不管是何種異常,都捕獲異常信息。
1.使用Exception:所有的異常都是 Exception 的子類。所以 Exception能匹配所有類型的異常。
舉例:
>>> try:
100/0
except Exception as e:
print('未知異常:', e)
# 對(duì)于很多剛學(xué)Python或者是學(xué)著學(xué)著迷茫了的小伙伴,我給大家準(zhǔn)備了一套Python的學(xué)習(xí)資料。
# 包括數(shù)百本電子書、Python基礎(chǔ)視頻教程、項(xiàng)目實(shí)戰(zhàn),疑難解答,直接在文末名片自取。
未知異常: division by zero
>>>
可以正常捕獲到異常的原因,但不能輸出詳細(xì)的異常信息(發(fā)送異常的位置和異常的代碼)。
2.使用traceback模塊:使用traceback模塊里面的format_exc函數(shù),可以顯示異常的信息 和 異常產(chǎn)生處的函數(shù)調(diào)用棧的信息。
舉例:
>>> import traceback
>>> try:
100/0
except :
print(traceback.format_exc())
Traceback (most recent call last):
File "<pyshell#5>", line 2, in <module>
ZeroDivisionError: division by zero
>>>
上面的代碼會(huì)打印出導(dǎo)致異常的詳細(xì)的函數(shù)調(diào)用棧的信息
到此這篇關(guān)于Python中異常捕獲與處理的方法總結(jié)的文章就介紹到這了,更多相關(guān)Python異常內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python檢測(cè)主機(jī)的連通性并記錄到文件的實(shí)例
今天小編就為大家分享一篇python檢測(cè)主機(jī)的連通性并記錄到文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
python中字典dict排序sorted的實(shí)現(xiàn)
本文主要介紹了python中字典dict排序sorted的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
Python+Pygame制作簡(jiǎn)易版2048小游戲
2048作為經(jīng)典的手機(jī)端游戲一直深受大家的喜愛(ài),本文將利用Python中的Pygame模塊制作簡(jiǎn)單版的2048游戲,感興趣的小伙伴可以了解一下2022-02-02
對(duì)dataframe進(jìn)行列相加,行相加的實(shí)例
今天小編就為大家分享一篇對(duì)dataframe進(jìn)行列相加,行相加的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
Python中用pyinstaller打包時(shí)的圖標(biāo)問(wèn)題及解決方法
這篇文章主要介紹了python中用pyinstaller打包時(shí)的圖標(biāo)問(wèn)題及解決方法,本文從兩方面給大家分析原因所在,通過(guò)截圖實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-02-02
Python中sorted()排序與字母大小寫的問(wèn)題
這篇文章主要介紹了Python中sorted()排序與字母大小寫的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Python實(shí)現(xiàn)購(gòu)物車功能的方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)購(gòu)物車功能的方法,結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)購(gòu)物車功能的具體步驟、相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2017-11-11

