python异常处理的语法格式_Python异常处理
Python異常處理
一. 異常的概念
程序在運行時,如果 Python 解釋器 遇到 到一個錯誤,會停止程序的執行,并且提示一些錯誤信息,這就是 異常。
程序停止執行并且提示錯誤信息 這個動作,我們通常稱之為:拋出(raise)異常。
二. 捕獲異常
程序開發時,很難將 所有的特殊情況 都處理的面面俱到,通過 異常捕獲 可以針對突發事件做集中的處理,從而保證程序的 穩定性和健壯性。
程序開發時,很難將 所有的特殊情況 都處理的面面俱到,通過 異常捕獲 可以針對突發事件做集中的處理,從而保證程序的 穩定性和健壯性
錯誤類型捕獲
先看個例子:
>ipython
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: #提示用戶輸入一個整數
IIn [2]: num = int(input("輸入一個整數: "))
輸入一個整數: 10
In [3]: num = int(input("輸入一個整數: "))
輸入一個整數: i
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
in
----> 1 num = int(input("輸入一個整數: "))
ValueError: invalid literal for int() with base 10: 'i'
In [4]:
在程序開發中,如果 對某些代碼的執行不能確定是否正確,可以增加 try(嘗試) 來 捕獲異常
捕獲異常最簡單的語法格式:
try:
嘗試執行的代碼
except:
出現錯誤的處理
try 嘗試,下方編寫要嘗試代碼,不確定是否能夠正常執行的代碼
except 如果不是,下方編寫嘗試失敗的代碼
試著來解決上一個例子出現的問題
try: # 提示用戶輸入一個數字
num = int(input("請輸入數字:"))
except:
print("請輸入正確的數字")
更進一步:錯誤類型捕獲
在程序執行時,可能會遇到 不同類型的異常,并且需要 針對不同類型的異常,做出不同的響應,這個時候,就需要捕獲錯誤類型了
語法如下:
try:
pass # 嘗試執行的代碼
except 錯誤類型1:
pass # 針對錯誤類型1,對應的代碼處理
except (錯誤類型2, 錯誤類型3):
pass # 針對錯誤類型2 和 3,對應的代碼處理
except Exception as result:
print("未知錯誤 %s" % result)
異常類型當 Python 解釋器 拋出異常 時,最后一行錯誤信息的第一個單詞,就是錯誤類型
接著完善剛才的代碼:
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)
注意:result是推薦寫法,可以任意指定。
異常捕獲的完整語法
在實際開發中,為了能夠處理復雜的異常情況,完整的異常語法如下:
try: # 嘗試執行的代碼
pass
except 錯誤類型1:
# 針對錯誤類型1,對應的代碼處理
pass
except 錯誤類型2:
# 針對錯誤類型2,對應的代碼處理
pass
except (錯誤類型3, 錯誤類型4):
#針對錯誤類型3 和 4,對應的代碼處理
pass
except Exception as result:
# 打印錯誤信息
print(result)
else:
# 沒有異常才會執行的代碼
pass
finally:
# 無論是否有異常,都會執行的代碼
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("執行完成,但是不保證正確")
三. 異常的傳遞
當 函數/方法 執行 出現異常,會 將異常傳遞 給 函數/方法 的 調用一方;
如果 傳遞到主程序,仍然 沒有異常處理,程序才會被終止。
提示:
在開發中,可以在主函數中增加 異常捕獲,而在主函數中調用的其他函數,只要出現異常,都會傳遞到主函數的 異常捕獲 中。
這樣就不需要在代碼中,增加大量的 異常捕獲,能夠保證代碼的整潔。
例子:
定義函數 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)
四. 主動拋出異常–raise
在開發中,除了 代碼執行出錯 Python 解釋器會 拋出 異常之外,還可以根據 應用程序 特有的業務需求 主動拋出異常。
來看個例子:
需求
定義 input_password 函數,提示用戶輸入密碼
如果用戶輸入長度 < 8,拋出異常
如果用戶輸入長度 >=8,返回輸入的密碼
注意
當前函數 只負責 提示用戶輸入密碼,如果 密碼長度不正確,需要其他的函數進行額外處理
因此可以 拋出異常,由其他需要處理的函數 捕獲異常
Python 中提供了一個 Exception 異常類
在開發時,如果滿足 特定業務需求時,希望 拋出異常,可以:
創建 一個 Exception 的 對象
使用 raise 關鍵字 拋出 異常對象
實現
def input_password():
# 1. 提示用戶輸入密碼
pwd = input("請輸入密碼:")
# 2. 判斷密碼長度,如果長度 >= 8,返回用戶輸入的密碼
if len(pwd) >= 8:
return pwd
# 3. 密碼長度不夠,需要拋出異常
# 1> 創建異常對象 - 使用異常的錯誤信息字符串作為參數
ex = Exception("密碼長度不夠")
# 2> 拋出異常對象
raise ex
# 測試:
try:
userpwd = input_password()
print("user_pwd: ",userpwd)
except Exception as result:
print("發現錯誤:%s" % result)
總結
以上是生活随笔為你收集整理的python异常处理的语法格式_Python异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 复现autotune算法时遇到的若干问题
- 下一篇: python word 转html,怎么