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