Python知識(shí)分享網(wǎng) - 專(zhuān)業(yè)的Python學(xué)習(xí)網(wǎng)站 學(xué)Python,上Python222
Python 異常捕獲與處理
匿名網(wǎng)友發(fā)布于:2023-09-13 09:58:33
(侵權(quán)舉報(bào))

Python 7天快速入門(mén)完整視頻教程https://www.bilibili.com/video/BV1o84y1Z7J1

 

Python   異常捕獲與處理

 

 

如果出現(xiàn)程序異常,我們不去捕獲和處理,那么程序遇到異常,就直接終止,后續(xù)的代碼無(wú)法繼續(xù)執(zhí)行,這將是可怕的事情。

Python提供了完善的異常處理機(jī)制,可以實(shí)現(xiàn)捕獲異常,處理異常,最終實(shí)現(xiàn)代碼繼續(xù)運(yùn)行下去。從而讓程序具有極好的容錯(cuò)性,讓程序更加的健壯。

 

 

使用try...except捕獲異常

 

基本語(yǔ)法:

try:

可能會(huì)有異常的代碼

except:

出現(xiàn)異常的執(zhí)行代碼

 

try:
    print(2 / 0)
except:
    print("出現(xiàn)了異常")
print("程序繼續(xù)")

 

 

捕獲指定的異常

 

try:
    print(2 / 0)
except ZeroDivisionError as z:
    print("出現(xiàn)了異常")
print("程序繼續(xù)")

 

多個(gè)except:

 

try:
    print(Person().sex)
except ZeroDivisionError as e:
    print("出現(xiàn)了除0異常")
except AttributeError as a:
    print("出現(xiàn)屬性異常")
print("程序繼續(xù)")

 

捕獲所有異常,BaseException異常類(lèi)是所有異常類(lèi)的基類(lèi)(老祖宗類(lèi)),所有異常類(lèi)都是直接或者間接繼承BaseException異常類(lèi),Exception類(lèi)是繼承BaseException,并且有很多具體實(shí)現(xiàn),大部分的異常類(lèi)直接繼承Exception,所以我們一般開(kāi)發(fā)用Exeption。

 

try:
    print(2 / 0)
except Exception as e:
    print("出現(xiàn)了異常")
print("程序繼續(xù)")

 

 

多異常捕獲

 

 

假如程序塊可能出現(xiàn)異常的種類(lèi)比較多,我們可以用多異常捕獲,只要出現(xiàn)其中一個(gè)異常,就會(huì)捕獲到。

語(yǔ)法:

try:

可能會(huì)有多種異常的代碼

except (異常1,異常2...異常N):

出現(xiàn)異常的執(zhí)行代碼

 

try:
    print(Person().sex)
except (ZeroDivisionError, AttributeError):
    print("出現(xiàn)了除0異?;蛘邔傩援惓?)
except:
    print("出現(xiàn)了未知異常")
print("程序繼續(xù)")

 

 

else塊

 

在Python的異常處理流程中還可添加一個(gè)else塊,當(dāng) try塊沒(méi)有出現(xiàn)異常時(shí),程序會(huì)執(zhí)行else塊。例如如下程序。

 

# 定義人類(lèi)
class Person:
    # 屬性 姓名
    name = None
    # 屬性 年齡
    age = None


# print(Person().sex)
# print(2 / 0)
# print("程序繼續(xù)")
try:
    print(2 / 0)
except:
    print("出現(xiàn)了異常")
print("程序繼續(xù)")

 

 

finally塊

 

 

在異常處理中,finally塊中的代碼無(wú)論是否出現(xiàn)異常,都會(huì)執(zhí)行。

有些時(shí)候,程序在try塊里打開(kāi)了一些物理資源(例如數(shù)據(jù)庫(kù)連接、網(wǎng)絡(luò)連接和磁盤(pán)文件等),這些物理資源都必須被顯式回收。

 

try:
    print(2 / 0)
except:
    print("出現(xiàn)了異常")
else:
    print("沒(méi)有出現(xiàn)異常,我們做一些操作")
finally:
    print("無(wú)論是否有異常,都會(huì)執(zhí)行")
print("程序繼續(xù)")

 

 

 

轉(zhuǎn)載自: