程序在運行過程當中,遇到一個錯誤,會中止程序的運行,而且提示一些錯誤信息,這就是異常ide
程序中止執行而且提示錯誤信息這個動做,稱爲拋出異常函數
捕獲異常最簡單的語法格式:code
try: 嘗試執行的代碼 except: 出現錯誤的處理
要求用戶輸入整數blog
try: num = int(input("請輸入數字:")) except: print("請輸入正確的數字")
在程序執行中,咱們可能由於業務邏輯不一樣要捕獲不一樣類型的異常,而且針對不一樣的異常,作出不一樣的處理邏輯繼承
try: 嘗試執行的代碼 except 錯誤類型1: 針對錯誤類型1,對應的代碼處理 except (錯誤類型2, 錯誤類型3): 針對錯誤類型2 和 3,對應的代碼處理 except Exception as result: print("未知錯誤 %s" % result)
try: 嘗試執行的代碼 except 錯誤類型1: 針對錯誤類型1,對應的代碼處理 except 錯誤類型2: 針對錯誤類型2,對應的代碼處理 except (錯誤類型3, 錯誤類型4): 針對錯誤類型3 和 4,對應的代碼處理 except Exception as result: 未知異常 else: 沒有異常纔會執行的代碼 pass finally: 不管是否有異常,都會執行的代碼
當函數執行過程當中發生了異常,將會把異常傳遞給給函數的調用者,若是傳遞到主函數,尚未被處理,纔會終止運行開發
在開發過程當中,能夠在主函數中增長異常捕獲input
在主函數調用其餘函數產生異常的時候,只要出現異常,都會傳遞到主函數的異常處理it
減小了代碼重複,保證了代碼的可讀性io
在開發中,除了代碼執行出錯Python解釋器會拋出異常外,還可使用關鍵字raise主動拋出異常class
def auth_password(): pwd = input("請輸入密碼:") if len(pwd) >= 8: return pwd ex = Exception("密碼長度不夠") raise ex if __name__ == '__main__': try: user_pwd = auth_password() print(user_pwd) except Exception as result: print("發現錯誤:%s" % result)
Python有兩種異常,一種是內置異常,一種是自定義異常
咱們發現Python全部異常繼承於BaseException,異常繼承自Exception,因此咱們定義的異常也要繼承自Exception
class DemoException(Exception): def __str__(self): return '自定義異常' if __name__ == '__main__': try: raise DemoException() except DemoException as e: print(e) # 自定義異常