assert文とは
条件式がTrueではない時に、例外を投げます。
これを仕込んでおくと、それまでちゃんと動いていたコードが、いじっているうちにいつの間にか想定と異なる振る舞いをするようになった時に、いち早く気づくことが出来ます。「とにかく想定と違ったら止める」というだけで良いなら、別途テストを書かなくていいので便利です。
機械学習やデータ分析 では、仕様が決まっておらず試行錯誤しなければいけない部分が多くあるし、アドホックな対応も結構あり、テストを書くことが必ずしもなじまない場合が多いと思います。このような領域では、特におすすめしたいです。
pytestなどのちゃんとしたテスト用途以外では、asset文はJupyter Notebookで使うのが一番効果的だと個人的には思います。関数のセルの下に、assert文でちょっとしたテストを書いておくと便利です。また、データを読み込んだ直後にデータチェックをしたり、データの結合や更新などの処理の後に、重複や欠損のチェックを入れたりするのも良いでしょう。データ分析時点ではデータ内容はガチガチに固められていなくて、はじめから、あるいは処理の結果想定外の内容になっていることは十分ありえます。
使い方
構文は以下のとおりです。
assert 条件式, 条件式がFalseの場合に出力するメッセージ
条件式が False
の場合、AssertionError
の例外が発生します。
条件式が True
の場合は何も起こりません。
>>> kitai = 100
>>> input = 1
>>> assert kitai == input, '期待する値[{0}], 入力値[{1}]'.format(kitai, input)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: 期待する値[100], 入力値[1]
ちゃんと例外を処理するならこんな感じ。
>>> try:
... kitai = 100
... input = 1
... assert kitai == input, '期待する値[{0}], 入力値[{1}]'.format(kitai, input)
... except AssertionError as err:
... print('AssertionError :', err)
...
AssertionError : 期待する値[100], 入力値[1]
assert文を無効にする
assert文は、組み込み定数__debug__
がTrue
の時のみ実行されます。特に何もしなければこの状態です。
Pythonスクリプト実行時のコマンドラインオプションに-O
をつけると、__debug__
がFalse
になり、assert文が無効になります。
参考
Python3.6 公式ドキュメント