什么是異常??
程序錯誤(errors)有時也被稱為程序異常(exceptions),這是每個編程人員都會經(jīng)常遇到的問題。在過去,當遇到這類情況時,程序會終止執(zhí)行并顯示錯誤信息,通常是以Traceback的形式展示詳細的異常報告。然而,Python提供了一項強大的功能,允許我們捕捉這些異常并編寫相應的異常處理程序。當異常被捕捉時,會執(zhí)行相應的異常處理程序,從而使程序能夠繼續(xù)執(zhí)行,而不是立即終止。這樣的機制極大地增強了程序的健壯性和容錯能力。
示例:
Python提供了多種內(nèi)置的異常類型
在Python中,異常是程序運行時發(fā)生的錯誤情況。Python提供了多種內(nèi)置的異常類型,用于處理不同的錯誤場景。以下是一些常見的Python異常種類:
- AttributeError:當訪問的對象屬性不存在或者不支持賦值時觸發(fā)。
- AssertionError:當assert斷言條件為假時拋出。
- ImportError:導入模塊或包時出錯,通常是由于路徑問題或名稱錯誤。
- IndexError:當訪問序列(如列表、元組或字符串)時,下標索引超出其范圍。
- KeyError:在字典中查找一個不存在的鍵時觸發(fā)。
- NameError:嘗試訪問一個未定義的變量時拋出。
- OSError:操作系統(tǒng)產(chǎn)生的異常,如文件操作錯誤。
- SyntaxError:當代碼中存在語法錯誤時拋出。
- TypeError:在運算或函數(shù)調用中,使用了不兼容的類型時觸發(fā)。例如,嘗試將整數(shù)和字符串相加。
- ValueError:當函數(shù)或操作的參數(shù)具有正確的類型但不合法時引發(fā)。例如,嘗試將非數(shù)字字符串轉換為整數(shù)。
- ZeroDivisionError:進行數(shù)學運算時除數(shù)為0時觸發(fā)。
當這些異常發(fā)生時,Python會中斷當前的執(zhí)行流程,并跳轉到異常處理代碼(如果有的話)。如果沒有適當?shù)漠惓L幚泶a,程序將終止并顯示錯誤信息。通過編寫try
和except
塊,可以捕獲這些異常并定義自定義的異常處理邏輯,從而使程序更加健壯和容錯。
捕獲異常try-except
基本捕獲異常方法
try :
指令 #預先設想可能引發(fā)錯誤異常的指令
except 異常對象:
異常處理程序 #通常是指出異常原因,方便修正
實例代碼:
def div(x,y):
try:
return x / y
except ZeroDivisionError :
print("除數(shù)不可為0")
print(div(5,0))
print(div(2,2))
代碼解釋:?
當try塊中的代碼引發(fā)異常時,控制流會立即轉移到與之匹配的except塊。在這個例子中,except?ZeroDivisionError塊會捕獲ZeroDivisionError異常,并執(zhí)行塊內(nèi)的代碼,即打印出“除數(shù)不可為0”。
當您調用print(div(5,0))時,由于除數(shù)為0,會引發(fā)ZeroDivisionError異常,因此會執(zhí)行except塊中的代碼,打印出“除數(shù)不可為0”,并且函數(shù)返回None(因為沒有return語句在except塊中)。所以,第一個print語句的輸出是“除數(shù)不可為0”,而div(5,0)的返回值是None。
當您調用print(div(2,2))時,由于除數(shù)不為0,try塊中的代碼可以成功執(zhí)行,返回商1.0。因此,第二個print語句的輸出是1.0。
如果想要消除“None”,可用return,看下面這個例子:
def div(x,y):
try:
return x / y
except ZeroDivisionError :
return("除數(shù)不可為0")
print(div(5,0))
print(div(2,2))
輸出結果:
D:\anaconda2019\python.exe D:/pyprogect/異常處理/test1.py
除數(shù)不可為0
1.0
Process finished with exit code 0
捕獲多種異常
示例代碼:
def div(x,y):
try:
return x / y
except (NameError,ZeroDivisionError) as err :
return("捕獲到命名異常 或者 除0異常")
print(div(5,0))
輸出結果:
D:\anaconda2019\python.exe D:/pyprogect/異常處理/test1.py
捕獲到命名異常 或者 除0異常
捕獲所有異常
try-except可以獲取全部的異常?
def div(x,y):
try:
return x / y
except :
print("出現(xiàn)了某種異常。")
print(div(5,0))
或者使用Exception
def div(x,y):
try:
return x / y
except Exception as e :
print("出現(xiàn)了某種異常。")
print(div(5,0))
異常的else
def div(x,y):
try:
print(x / y)
except Exception as e :
print("出現(xiàn)了某種異常。")
else:
print("沒有出現(xiàn)異常。")
div(5,5)
?結果輸出:
D:\anaconda2019\python.exe D:/pyprogect/異常處理/test1.py
1.0
沒有出現(xiàn)異常。
Process finished with exit code 0
異常中的Finally
finally表示的是無論是否異常都要執(zhí)行的代碼。文章來源:http://www.zghlxwxcb.cn/news/detail-827901.html
try:
print(5 / 2)
except Exception as e :
print("出現(xiàn)了某種異常。")
else:
print("該程序中沒有出現(xiàn)異常。")
finally:
print("《程序結束》")
輸出結果:文章來源地址http://www.zghlxwxcb.cn/news/detail-827901.html
D:\anaconda2019\python.exe D:/pyprogect/異常處理/test1.py
2.5
該程序中沒有出現(xiàn)異常。
《程序結束》
Process finished with exit code 0
到了這里,關于Python編程中的異常處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!