1、什么是異常
當檢測到一個錯誤時,解釋器就無法繼續執行了,反而出現了一些錯誤的提示,這就是所謂的"異常"。
2、異常演示
# 運算符
# print(10/0)
# 文件異常
f = open('python.txt', 'r')
content = f.readlines()
print(content)
3、異常捕獲
基本語法:
try:
? ? 可能發生錯誤的代碼
except(捕獲):
? ? 如果出現異常執行的代碼
try...except主要用于捕獲代碼運行時異常
案例:
try:
? ? f = open('python.txt', 'r')
? ? content = f.readline()
? ? print(content, end='')
except:
? ? f = open('python.txt', 'w', encoding='utf-8')
? ? f.write('發生異常,執行except語句中的代碼')
f.close()
4、捕獲指定異常
在以上案例代碼中,except相當于捕獲了所有異常,無論遇到什么錯誤都會自動執行except中封裝的代碼。但是有些情況下,我們向針對性的捕獲異常,并執行相應的代碼。
基本語法:
try:
? ? 可能遇到異常的代碼
except 異常類型:
? ? 捕獲到對應的錯誤以后,執行的代碼
① 如果嘗試執行的代碼的異常類型和要捕獲的異常類型不一致,則無法捕獲異常。
② 一般try下方只放一行嘗試執行的代碼。
案例:捕獲FileNotFoundError異常
try:
? ? f = open('python.txt', 'r')
except FileNotFoundError as e:
? ? print(e)
5、同時捕獲多個異常
try:
? ? print(name)
? ? # print(10/0)
except (NameError, ZeroDivisionError) as e:
? ? print(e)
6、捕獲所有未知異常
無論我們在except后面定義多少個異常類型,實際應用中,也可能會出現無法捕獲的未知異常。這個時候,我們考慮使用Exception異常類型捕獲可能遇到的所有未知異常:
try:
? ? 可能遇到的錯誤代碼
except Exception as e:
? ? print(e)
案例:打印一個未定義變量,使用Exception異常類進行捕獲
try:
? ? print(name)
except Exception as e:
? ? print(e)
7、異常捕獲中else語句
else語句:表示的是如果沒有異常要執行的代碼。
try:
? ? print(1)
except Exception as e:
? ? print(e)
else:
? ? print('哈哈,真開森,沒有遇到任何異常')
案例:
try:
? ? f = open('python.txt', 'r')
except Exception as e:
? ? print(e)
else:
? ? content = f.readlines()
? ? print(content, end='')
? ? f.close()
8、異常捕獲中的finally語句
finally表示的是無論是否異常都要執行的代碼,例如關閉文件、關閉數據庫連接。
try:
? ? f = open('python.txt', 'r')
except:
? ? f = open('python.txt', 'w')
else:
? ? print('哈哈,真開森,沒有遇到任何異常')
finally:
? ? print('關閉文件')
? ? f.close()