關鍵字 (keyword) 用來進行簡單的條件 (condition) 判斷,如果條件為真,程式 (program) 繼續執行,反之條件為假的話,就會發起 Assertion 例外 (exception) ,中斷程式執行。
最基本的使用就是直接在 assert 後面接上運算式 (expression) ,這裡用 True ,逗號後面則是 Assertion 例外的提示訊息,由於是 True ,因此沒有發起例外
assert True, "繼續執行"
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:assert01.py
# 功能:示範 assert 陳述
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 assert01.py |
$ |
反之 assert 後面如果是 False 就會直接發起例外
assert False, "繼續執行"
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:assert02.py
# 功能:示範 assert 陳述
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 assert02.py |
Traceback (most recent call last): |
File "assert02.py", line 1, in <module> |
assert False, "繼續執行" |
AssertionError: 繼續執行 |
$ |
這樣的方式可以用在函數 (function) 或方法 (method) 中,檢查參數 (parameter) 是否符合需求
def divide(a, b):
assert b != 0, "除數不能是零"
return a / b
print(divide(1, 2))
print(divide(1, 0))
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:assert03.py
# 功能:示範 assert 陳述
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 assert03.py |
0.5 |
Traceback (most recent call last): |
File "assert03.py", line 6, in <module> |
print(divide(1, 0)) |
File "assert03.py", line 2, in divide |
assert b != 0, "除數不能是零" |
AssertionError: 除數不能是零 |
$ |
如果程式不想被中斷結束,就把具有 assert 的函數或方法放到 try-except 例外處理的複合陳述中執行,這裡是用變數 (variable) r 取得 divide() 函數的回傳值 (return value) ,如果例外發生,就將變數 r 設定為整數 1
def divide(a, b):
assert b != 0, "除數不能是零"
return a / b
r = -1
try:
r = divide(1, 0)
except:
r = 1
print(1)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:assert04.py
# 功能:示範 assert 陳述
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 assert04.py |
1 |
$ |
換句話說, assert 就像是 if 及 raise 的簡化版本
def divide(a, b):
if b == 0:
raise BaseException("除數不能是零")
return a / b
print(divide(1, 2))
print(divide(1, 0))
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:assert05.py
# 功能:示範 assert 陳述
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 assert05.py |
0.5 |
Traceback (most recent call last): |
File "assert05.py", line 7, in <module> |
print(divide(1, 0)) |
File "assert05.py", line 3, in divide |
raise BaseException("除數不能是零") |
BaseException: 除數不能是零 |
$ |
相關教學影片