前言:本文主要介紹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 = '
這是乙個測試異常的文字
(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
(b)except
nameerror as msg:
(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 定義在...