異常處理: Python程式運作文法出錯會有異常抛出不處理異常會導緻程式終止

示例:使用者輸入一個整數轉換成int型,如果使用者輸入的不是數字而是其他例如字母等則會出現異常
不使用異常處理代碼的處理方法
#cat 異常處理.py
abc = input("請輸入一個數字")
if not abc.isdigit(): # 判斷是否數字,如果不是則退出
print("你到底知不知道什麼是數字")
exit()
else: # 否則轉換成int型
abc = int(abc)
print(abc)
使用異常處理代碼try
# cat 異常處理.py
try:
abc = int(abc)
except ValueError:
print("你到底知不知道什麼是數字")
print(abc)
try語句執行規則
1,首先,按順序執行try字句
2,如果沒有異常發生,則忽略except子句,try子句執行後結束
3,如果在執行try子句的過程中發生了異常,那麼try子句餘下的部分被忽略
4,如果異常的類型和except之後的名稱相符,你們對應的except子句将被執行。最後執行try語句自豪的代碼
5,如果一個異常沒有與任何except比對,那麼整個異常将會報錯并終止程式。
示例
# cat 異常處理2.py
list1 = [1, 2, 3]
try:
print(list1[3]) # 執行這一句,正常就直接執行,不管後面的錯誤;如果不正常,則要繼續往下看,本次因為沒有這個元素,執行會報IndexError: list index out of range 錯誤
except TypeError: # 捕獲異常,如果是TypeError錯誤則執行,列印error1,如果不是則繼續往下看
print("error1")
except IndexError as err: # 如果是IndexError則執行列印error2,并且把異常輸出列印
print("error2:", err)
print("haha") # 異常沒有被捕捉到,會正常執行,如果被捕捉到,會報自定義錯誤,并且可以繼續執行此代碼
輸出為
error2: list index out of range
haha
# cat 異常處理3.py
list1 = [1, 2, 3]
try:
print(list1[3]) # 這是一個IndexError
except TypeError as err: # 沒有捕捉到對應錯誤類型
print("error1", err)
except SyntaxError as err: # 沒有捕捉到對應錯誤類型
print("error2", err)
except Exception as err: # Exception代表所有錯誤異常
print("error3", err)
finally始終執行
try:
abc = int(abc)
except ValueError:
print("你到底知不知道什麼是數字")
finally:
print("始終執行") # 不管是否出現異常始終都會執行finally内語句
print(abc)