Help us understand the problem. What is going on with this article?

[Python] assert文で超お手軽テスト

More than 1 year has passed since last update.

基本的な情報が少なかったのでメモ。

assert文とは

条件式がTrueではない時に、例外を投げます。
これを仕込んでおくと、それまでちゃんと動いていたコードが、いじっているうちにいつの間にか想定と異なる振る舞いをするようになった時に、いち早く気づくことが出来ます。「とにかく想定と違ったら止める」というだけで良いなら、unittest等のテストクラスを書かなくていいので便利です。
機械学習やデータ分析 では、仕様が決まっておらず試行錯誤しなければいけない部分が多くあるし、アドホックな対応も結構あり、テストを書くことが必ずしもなじまない場合が多いと思います。このような領域では、特におすすめしたいです。

使い方

構文は以下のとおりです。

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 公式ドキュメント
- 7.3. assert
- 3. 組み込み定数 __debug__
- 1. コマンドラインと環境 -O オプション

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away