アサーションとは
アサーション(assertion)とは、プログラムが期待する条件で動いているかチェックする機能のことです。
アサーションを適応することで条件外の挙動が起きた時にAssertionErrorが出力され、デバッグしやすくなるといった特徴があります。
if文との違いは?
if文ではエラーチェックを行えますが、アサーションとの違いは何でしょうか?
エラーチェックはユーザーや外部システムによる予期しない入力や挙動を処理し、アサーションは開発者がコードの振る舞いについて設定した前提条件を確認するために使用されます。
アサーションはプログラムのバグチェックに使えます。アサーションを使うことで早期にプログラム上の重大な欠陥を見つけ出し、修正するのに役立ちます。
構文
基本的にはassert
の後ろにチェックしたい式を記述します。
assert expression
また、カンマ区切りで任意のエラー文を出力できます。
def check_age(age):
assert age >= 0, "Value Error"
return age
check_age(-1)
# Value Error
注意点
assert
はデバッグ目的に使用する
基本的にはコードに欠陥がないか開発やデバッグフェーズで利用するものです。運用時には例外処理などのエラーハンドリングを行います。
assert
の無効化
Pythonの実行オプションである-0
や-00
を用いることでassert
文は無視されます。これはassert
が
if __debug__:
if not expression: raise AssertionError
と等価であるためです。組み込み変数__debug__
は通常True
ですが、最適化が要求された場合(-0
, -00
)、にFalse
となります。
常にTrue
となるassert
assert文にタプルを渡したとき、空でなければ常にTrue
となります。したがってタプル内に変数を渡してチェックさせようとした時、常にTrue
と判定されることになります。
x = 2
assert (x == 1 , "xに1以外の値が入ってます")
テストケースを作成するときに気を付けないといけないですね。ただしPython3ではSyntaxWarning
を表示してくれます。
参考サイト