python的assert和raise的用法
一、raise用法
在程序運行的過程當中,除了python自動觸發的異常外,python也允許我們在程序中手動設置異常,使用 raise 語句即可,
為什么還要手動設置異常呢?首先要分清楚程序發生異常和程序執行錯誤,它們完全是兩碼事,程序由于錯誤導致的運行異常,是自動觸發的,需要程序員想辦法解決的;但還有一些異常,是程序正常運行的結果,比如用 raise 手動引發的異常。
raise的基本格式
raise [exceptionName [(reason)]]
其中,用 [] 括起來的為可選參數,其作用是指定拋出的異常名稱,以及異常信息的相關描述。如果可選參數全部省略,則 raise 會把當前錯誤原樣拋出;如果僅省略 (reason),則在拋出異常時,將不附帶任何的異常描述信息。
raise 語句有如下三種常用的用法:
1. raise:單獨一個 raise。該語句引發當前上下文中捕獲的異常(比如在 except 塊中),或默認引發 RuntimeError 異常。
a = 'a' if not a.isdigit(): raise print(a) # 上面的代碼中,如果a=1,就可以正常運行,并且會打印1,但是值為'a',所以會走if判斷,直接拋異常
運行結果如下:

2. raise 異常類名稱:raise 后帶一個異常類名稱,表示引發執行類型的異常。
a = 'a' if not a.isdigit(): raise ValueError print(a)
運行結果:
3. raise 異常類名稱(描述信息):在引發指定類型的異常的同時,附帶異常的描述信息。
a = 'a' if not a.isdigit(): raise ValueError("a 必須是數字") print(a)

異常捕獲:
當然我們也可以通過try去捕獲我們手動觸發的異常,如下:
try: a = 'a' #判斷用戶輸入的是否為數字 if not a.isdigit(): raise ValueError("a 必須是數字") # 這里的異常會被捕獲并打印 except Exception as e: print("引發異常:", repr(e)) raise # 這里再次手動去觸發異常

二、assert用法
assert(斷言):斷定此處是對的,如果錯了,就報錯。
通常在測試程序時不知道哪里會出錯,只有執行到最后才能看到錯誤信息。assert可以在條件不滿足程序運行的情況下直接返回錯誤,而不必等待程序運行后出現崩潰的情況。
assert的語法格式:
assert expression # 如果expression是錯的,就會報錯
等價于:
if not expression: raise AssertionError
示例如下:
a = 1 assert a > 2 # 斷言a大于2,如果為真,程序繼續向下執行,如果a不大于2,直接拋AssertionError的異常 b = 2 # 運行結果:報錯 Traceback (most recent call last): File "C:\workspace\test.py", line 2, in <module> assert a > 2 AssertionError
為assert斷言語句添加異常參數:
assert expression [, arguments]
# arguments這個參數是可選的,就是在expression后添加字符串信息,用來解釋斷言并更好知道哪里出了問題
示例如下:
a = 1 assert a > 2, 'a值小于2' # 上面逗號后面跟一個字符串,添加報錯說明 # 運行結果: Traceback (most recent call last): File "C:\workspace\test.py", line 2, in <module> assert a > 2, 'a值小于2' AssertionError: a值小于2

浙公網安備 33010602011771號