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

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

 

Python   異常捕獲與處理

 

 

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

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

 

 

使用try...except捕獲異常

 

基本語法:

try:

可能會有異常的代碼

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ù)")

 

多個except:

 

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

 

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

 

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

 

 

多異常捕獲

 

 

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

語法:

try:

可能會有多種異常的代碼

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的異常處理流程中還可添加一個else塊,當 try塊沒有出現(xiàn)異常時,程序會執(zhí)行else塊。例如如下程序。

 

# 定義人類
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塊中的代碼無論是否出現(xiàn)異常,都會執(zhí)行。

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

 

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

 

 

 

轉(zhuǎn)載自: