異常處理
-
- 1.什麼是異常
- 1.1常見異常
- 2.異常處理機制
- 3.觸發異常
- 4.使用者自定義異常
1.什麼是異常
Error(錯誤)
是系統中的錯誤,程式員是不能改變的和處理的,如系統崩潰,記憶體空間不足,方法調用棧溢等。遇到這樣的錯誤,建議讓程式終止。
Exception
(異常)表示程式可以處理的異常,可以捕獲且可能恢複。遇到這類異常,應該盡可能處理異常,使程式恢複運作,而不應該随意終止異常。
1.1常見異常
AttributeError | ? |
---|---|
IOError | |
ImportError | |
IndexError、 | |
SyntaxError | |
TypeError | |
ValueError | 、 |
KeyError | |
NameError | 變量未被定義#print(a) |
IndentationError | : 縮進錯誤 |
KeyboardInterrupt | : Ctrl+C被按下 |
UnboundLocalError | : 有同名的全局變量 |
ZeroDivsionError | 除0錯誤eg:print(10/0) |
FileNotFoundError | 檔案不存在 |
2.異常處理機制
Python 的異常機制主要依賴
try 、except 、else、finally 和 raise
五個關鍵字。
try
關鍵字後縮進的代碼塊簡稱 try 塊,它裡面放置的是
可能引發異常
的代碼;
except
關鍵字對應
異常類型和處理該異常的代碼塊;
多個 except 塊之後可以放一個 else 塊,表明程式不出現異常時還要執行 else 塊;
finally 塊用于回收在 try 塊裡打開的實體資源,異常機制會保證 finally 塊總被執行;
raise 用于引發一個實際的異常,raise 可以單獨作為語句使用,引發一個具體的異常對象;
#異常處理機制:
# else:沒有異常時,執行的内容
#finally: 總會執行的内容
try:
a = 1
print(b)
except NameError as e:
print('0-name error')
except KeyError:
print('4-key error')
except Exception as e:
print('1-exception')
else:
print('2-no error')
finally:
print('3-run code')
0-name error
3-run code
3.觸發異常
Python 允許程式自行引發異常,自行引發異常使用 raise 語句來完成。
raise語句中 Exception 是異常的類型(例如,NameError)參數标準異常中任一種,
args 是自已提供的異常參數。
raise [Exception [, args [, traceback]]]
age = int(input('age:'))
if 0<age<150:
print(age)
else:
# 抛出異常
raise ValueError("年齡必須在0~150之間")
4.使用者自定義異常
使用者自定義異常都應該繼承 Exception 基類或 Exception 的子類,在自定義異常類時基本不需要書寫更多的代碼,隻要指定自定義異常類的父類即可。
# 自定義的異常
class AgeError(ValueError):
pass
age = int(input('age:'))
if 0<age<150:
print(age)
else:
# 抛出異常
raise AgeError("年齡必須在0~150之間")
```