14 python異常處理及斷言

2021-10-02 10:23:03 字數 4751 閱讀 4656

前言:本文主要介紹python中異常的處理及斷言,包括異常型別、異常捕獲、主動跑出異常和斷言。

什麼是異常?異常即是乙個事件,該事件會在程式執行過程中發生,會影響程式的正常執行,一般情況下,在python無法正常處理程式時就會發生乙個異常。

異常是python物件,表示乙個錯誤。當python指令碼發生異常時我們需要捕獲處理它,否則程式會終止執行。

在python 中,所有的異常都是派生自baseexception類的例項,下面介紹幾種常見幾種異常:

baseexception:  所有異常的基類

常見的exception類異常型別舉例如下:

1.try/except語法格式

捕捉異常可以使用try/except語句,如果你不想在異常發生時結束你的程式,只需在try裡捕獲它,使用except在錯誤發生後執行處理動作。

語法格式:(注意:except中指定異常型別,可以指定乙個也可以指定多個,也可以不指定,不指定時預設捕獲所有exception型別的異常)

try:

可能出現異常的**

except 異常型別:

捕獲到異常之後的處理方案

上述例子中因為b沒有被定義,在列印時無法找到b,因此丟擲了乙個nameerror導致後面的**無法繼續執行,那麼我們來捕獲一下這個錯誤

try

:

#try有可能發生異常的**

a = '

這是乙個測試異常的文字

'print

(b)except (nameerror, filenotfounderror): #

當捕獲到異常時處理的方案,可以有多個except,不指定異常型別,會捕獲所有異常

print("

這裡有乙個異常!")

#except nameerror: 指定捕捉異常nameerror,其他的異常不會捕獲

#except exception as msg: # 不確定什麼異常異常,用exception,或者直接不指定

#print(msg)

print(a)

執行結果:

這裡有乙個異常!

這是乙個測試異常的文字

process finished with exit code 0

2.異常處理中的else和finally

在try/except語句中可以使用else和finally,try語句裡的**沒有異常才會執行else裡的語句,而finally語句是不管try裡有沒有異常它都會執行

try

:

#try下面寫有可能會出現異常的**

score = int(input("

請輸入成績:"))

#因為input獲取的都是字串,int()是強制轉換成int型別,英文本元等是無法轉換成int型別的字都會報錯

except

exception:

#處理異常之後的處理,

print("

用輸入的資料不符合規範,預設給0分")

score =0

else

:

#**沒有出現異常,執行else中的**

print("

**沒有出現異常,執行else")

finally

:

#不管**有沒有出現異常都會去執行的**

print("

finally不管**有沒有出現異常都會去執行的**")

print("

分數錄入為:{}

".format(score))

執行結果:

請輸入成績:nine

用輸入的資料不符合規範,預設給0分

finally不管**有沒有出現異常都會去執行的**

分數錄入為:0

process finished with exit code 0

異常捕獲後為什麼還要主動去丟擲乙個異常呢?這是為了方便我們知道出現異常的具體情況,我們還可以自定義異常

語法格式:raise 異常型別(異常資訊)

try

:

#try 有可能發生異常的**

a = 1111

print

(b)except

nameerror as msg:

print

(msg)

raise msg #

捕獲後執行不會報錯,再丟擲就會看到異常

else: #

try裡面的**都是正常執行,沒有發生任何異常,就會執行這裡

print("

程式執行正常!")

finally

:

print("

不管有沒有異常,我都會被執行!

")

執行結果:

name 'b

'isnotdefined

不管有沒有異常,我都會被執行!

捕獲後執行不會報錯,再丟擲就會看到異常

什麼是斷言?其實assert斷言就是用於判斷乙個表示式,在表示式條件為 false 的時候觸發斷言異常,斷言可以在條件不滿足程式執行的情況下直接返回錯誤,

而不必等待程式執行後出現崩潰的情況,例如我們的**只能在a>8時執行,可以先判斷當前是否符合條件。語法格式如下:

assert表示式,提示資訊  (也可以沒有提示資訊)

#

assert:斷言

res1 =

res2 =

#加乙個斷言,判斷結果是否如預期,如果與預期不一致,會報出斷言異常並列印提示資訊

assert res1 == res2, '

該用例不通過!

'

執行結果:

該用例不通過!'#

加乙個斷言,判斷結果是否如預期,如果與預期不一致,會報出斷言異常並列印提示資訊

assertionerror: 該用例不通過!

process finished with exit code 1

我們也可以用try/except來捕獲這個斷言異常:

#

assert:斷言

res1 =

res2 =

#用try--except捕獲斷言異常

try:

assert res1 ==res2

except

assertionerror as e:

print("

編號a1用例不通過!")

raise e #

處理異常後,丟擲異常

else

:

print("

編號a1用例通過!

")

執行結果:

編號a1用例不通過!

處理異常後,丟擲異常

出處:

python基礎 異常處理及斷言

異常有很多種型別,常見的由語法錯誤 syntaxerror 型別錯誤 typeerror 名字錯誤 nameerror 等等,但我們要知道的是異常本身就是乙個類的例項,所有的異常都繼承於這個baseexception,在這個父類上又下分了下面四大類 systemexit python退出異常 key...

1 4 Python 條件語句

python條件語句是通過一條或多條語句的執行結果 true或者false 來決定執行的 塊。可以通過下圖來簡單了解條件語句的執行過程 python程式語言指定任何非0和非空 null 值為true,0 或者 null為false。python 程式設計中 if 語句用於控制程式的執行,基本形式為 ...

14 python中定製類

2 python中 str 和 repr 特殊方法又稱為魔術方法 列印乙個例項 python如何把任意變數變為str的呢 因為任何資料型別的例項,都有乙個 str 的特殊方法,列印的時候實際呼叫的是這個方法 python的其餘特殊方法舉例 print的 str len的lencmp的 cmp 定義在...