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