python 抛出异常_python 异常
目標
異常的概念
捕獲異常
異常的傳遞
拋出異常
01. 異常的概念
程序在運行時,如果 Python 解釋器 遇到 到一個錯誤,會停止程序的執行,并且提示一些錯誤信息,這就是 異常
程序停止執行并且提示錯誤信息 這個動作,我們通常稱之為:拋出(raise)異常
程序開發時,很難將 所有的特殊情況 都處理的面面俱到,通過 異常捕獲 可以針對突發事件做集中的處理,從而保證程序的 穩定性和健壯性
02. 捕獲異常
2.1 簡單的捕獲異常語法
在程序開發中,如果 對某些代碼的執行不能確定是否正確,可以增加 try(嘗試) 來 捕獲異常
捕獲異常最簡單的語法格式:
try: 嘗試執行的代碼except: 出現錯誤的處理try 嘗試,下方編寫要嘗試代碼,不確定是否能夠正常執行的代碼
except 如果不是,下方編寫嘗試失敗的代碼
簡單異常捕獲演練 —— 要求用戶輸入整數
try: # 提示用戶輸入一個數字 num = int(input("請輸入數字:"))except: print("請輸入正確的數字")2.2 錯誤類型捕獲
在程序執行時,可能會遇到 不同類型的異常,并且需要 針對不同類型的異常,做出不同的響應,這個時候,就需要捕獲錯誤類型了
語法如下:
try: # 嘗試執行的代碼 passexcept 錯誤類型1: # 針對錯誤類型1,對應的代碼處理 passexcept (錯誤類型2, 錯誤類型3): # 針對錯誤類型2 和 3,對應的代碼處理 passexcept Exception as result: print("未知錯誤 %s" % result)當 Python 解釋器 拋出異常 時,最后一行錯誤信息的第一個單詞,就是錯誤類型
異常類型捕獲演練 —— 要求用戶輸入整數
需求
提示用戶輸入一個整數
使用 8 除以用戶輸入的整數并且輸出
try: num = int(input("請輸入整數:")) result = 8 / num print(result)except ValueError: print("請輸入正確的整數")except ZeroDivisionError: print("除 0 錯誤")捕獲未知錯誤
在開發時,要預判到所有可能出現的錯誤,還是有一定難度的
如果希望程序 無論出現任何錯誤,都不會因為 Python 解釋器 拋出異常而被終止,可以再增加一個 except
語法如下:
except Exception as result: print("未知錯誤 %s" % result)2.3 異常捕獲完整語法
在實際開發中,為了能夠處理復雜的異常情況,完整的異常語法如下:
提示:
有關完整語法的應用場景,在后續學習中,結合實際的案例會更好理解
現在先對這個語法結構有個印象即可
try: # 嘗試執行的代碼 passexcept 錯誤類型1: # 針對錯誤類型1,對應的代碼處理 passexcept 錯誤類型2: # 針對錯誤類型2,對應的代碼處理 passexcept (錯誤類型3, 錯誤類型4): # 針對錯誤類型3 和 4,對應的代碼處理 passexcept Exception as result: # 打印錯誤信息 print(result)else: # 沒有異常才會執行的代碼 passfinally: # 無論是否有異常,都會執行的代碼 print("無論是否有異常,都會執行的代碼")else 只有在沒有異常時才會執行的代碼
finally 無論是否有異常,都會執行的代碼
之前一個演練的 完整捕獲異常 的代碼如下:
try: num = int(input("請輸入整數:")) result = 8 / num print(result)except ValueError: print("請輸入正確的整數")except ZeroDivisionError: print("除 0 錯誤")except Exception as result: print("未知錯誤 %s" % result)else: print("正常執行")finally: print("執行完成,但是不保證正確")03. 異常的傳遞
異常的傳遞 —— 當 函數/方法 執行 出現異常,會 將異常傳遞 給 函數/方法 的 調用一方
如果 傳遞到主程序,仍然 沒有異常處理,程序才會被終止
提示
在開發中,可以在主函數中增加 異常捕獲
而在主函數中調用的其他函數,只要出現異常,都會傳遞到主函數的 異常捕獲 中
這樣就不需要在代碼中,增加大量的 異常捕獲,能夠保證代碼的整潔
需求
定義函數 demo1() 提示用戶輸入一個整數并且返回
定義函數 demo2() 調用 demo1()
在主程序中調用 demo2()
def demo1(): return int(input("請輸入一個整數:"))def demo2(): return demo1()try: print(demo2())except ValueError: print("請輸入正確的整數")except Exception as result: print("未知錯誤 %s" % result)04. 拋出 raise 異常
4.1 應用場景
在開發中,除了 代碼執行出錯 Python 解釋器會 拋出 異常之外
還可以根據 應用程序 特有的業務需求 主動拋出異常
示例
提示用戶 輸入密碼,如果 長度少于 8,拋出 異常
注意
當前函數 只負責 提示用戶輸入密碼,如果 密碼長度不正確,需要其他的函數進行額外處理
因此可以 拋出異常,由其他需要處理的函數 捕獲異常
4.2 拋出異常
Python 中提供了一個 Exception 異常類
在開發時,如果滿足 特定業務需求時,希望 拋出異常,可以:
創建 一個 Exception 的 對象
使用 raise 關鍵字 拋出 異常對象
需求
定義 input_password 函數,提示用戶輸入密碼
如果用戶輸入長度 < 8,拋出異常
如果用戶輸入長度 >=8,返回輸入的密碼
def input_password(): # 1. 提示用戶輸入密碼 pwd = input("請輸入密碼:") # 2. 判斷密碼長度,如果長度 >= 8,返回用戶輸入的密碼 if len(pwd) >= 8: return pwd # 3. 密碼長度不夠,需要拋出異常 # 1> 創建異常對象 - 使用異常的錯誤信息字符串作為參數 ex = Exception("密碼長度不夠") # 2> 拋出異常對象 raise extry: user_pwd = input_password() print(user_pwd)except Exception as result: print("發現錯誤:%s" % result)總結
以上是生活随笔為你收集整理的python 抛出异常_python 异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第二胎怀不上是什么原因
- 下一篇: websocket python爬虫_p