天天看點

Python異常處理(常見異常、異常處理機制、抛出異常,自定義異常)

異常處理

    • 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之間")
           
Python異常處理(常見異常、異常處理機制、抛出異常,自定義異常)

4.使用者自定義異常

使用者自定義異常都應該繼承 Exception 基類或 Exception 的子類,在自定義異常類時基本不需要書寫更多的代碼,隻要指定自定義異常類的父類即可。

# 自定義的異常
class AgeError(ValueError):
    pass


age = int(input('age:'))
if 0<age<150:
    print(age)
else:
    # 抛出異常
    raise AgeError("年齡必須在0~150之間")
    ```