Data Science|Basics

Pythonのassertをマスターしよう!基礎から具体例まで

Python初心者の方でassert文について

「なんとなくしか理解できない」
「assertの基礎知識から使い方まで網羅的に知りたい」
「assert文とif文やunittestとの違いを知りたい」

と思う人も多いでしょう。

そこで今回はassert文の構文や基礎知識から基本的な使い方、さらにはif文やunittestとの違いを詳しく説明していきます。それでは見ていきましょう。

assert文について

assert文について説明する前に、プログラムの「テスト」とは何か説明します。テストとはコードが予期しない動作をしないかどうかを調査する作業のことです。バグを取り除く「デバッグ」を行うためには予期しない動作を洗い出す作業が必要になるため、このassert文を使用してテストを行います。

「assert文」とは基本的に条件をテストするデバッグ支援ツールで、構文は次のようになっています。

1. assert 条件式 , 条件式がfalseになったときに出力するメッセージ

条件式が「false」の場合には例外「AssertionError」が起きてしまいます。「true」の場合には何も起きずに次の命令を実行します。

Pythonではテストを行うためのクラス「unittest」が用意されていますが、unittestを使用するよりもassert文を使用する方が簡単にテストを行うことができますよ。

このように、assert文を使うことで少しでも想定外の動作をした場合にすぐにエラーを出力してプログラムを終了させることができますよ。

assert文の使い方

ここからは実際にassert文の使い方を解説していきます。

  • 基本的な使い方
  • 無効にする方法

それでは見ていきましょう。

基本的な使い方

assert文の書式は以下の通りです。

1. # Falseの場合
2. assert False , error
3. Traceback ( most recent call last ) :
4.  File ‘’ , line 1, in
5. AssertError : error
6.
7. Trueの場合
8. assert True , ‘何も起きずに次の命令を実行’

それでは、ここからは実際にコードを使用して説明していきましょう。

1. text1 = “何も起こらない”
2. text2 = “エラー“
3. text3 = “何も起こらない“
4. assert text1 == text3
5. assert text1 == text2
6. print ( ‘Hello World’ )
7. # 実行結果
8. AssertionError

この例では、まず4行目でassert文を使用していますが「text1== text3」はTrueになるため何も起こりません。しかし、5行目でのassert文では「text1 == text2」がFalseになるためAssertionErrorが出て、そこでプログラムが終了します。6行目のprint文が実行されていないことを確認してください。

assert文では条件式の後にカンマを付けて記述することでエラーメッセージを記述することができます。

1. text1 = “何も起こらない“
2. text2 = “エラー“
3. assert text1 == text2 , ‘text1 is not equal to text2’
4. # 実行結果
5. AssertionError : text1 is not equal to text2

このプログラムでは条件「text1 == text2」が成立していないためAssertionErrorが起きています。このとき、指定したエラーメッセージが出力されていることが分かるでしょう。

このようにassert文を使用することで、プログラム中で想定と異なる振る舞いをしている場合に、すぐに気づくことができますよ。

無効にする方法

プロセス内のすべてのassert文を無効にするには、-Oフラグを使用しましょう。

1. $ python -Oc ‘assert False’
2.
3. $ pyton -c ‘assert False’
4. Traceback ( most recent call last ) :
5.  File ‘’ , line 1 , in
6. AssertionError

assert文は組み込み定数「 _debug_ 」がTrueのときだけ実行されます。Pythonスクリプト実行時のコマンドラインオプションに「-O」を付けると「 _debug_ 」が「False」になるのでassert文が無効になりますよ。

assert文とif文の違い

まずif文とは何かを説明していきます。
「if文」とはプログラム中で条件分岐を記述したい場合に用いられる構文です。ある条件式が成り立つ「True」であるか、成り立たない「False」であるかを判定して処理を分岐させることができます。

if文の構文は次の通りです。

1. if 条件式1 :
2.  条件式1がTrueの場合の処理
3. elif 条件式2 :
4.  条件式1がFalseかつ条件式2がTrueの場合の処理
5. else :
6.  条件式1,2がどちらもFalseの場合の処理

「elif」はif文の条件に当てはまらなかった場合にさらに他の条件に当てはまるかをチェックしたいときに使用します。「else」はifとelifのどちらの条件にも当てはまらなかった場合に処理を実行したいときに使用しますよ。

このことからassert文とif文の違いは、次の通りです。

構文\条件式の真偽 True False
assert文 何も起こらない エラーを出力
if文 処理を実行 何も起こらない

このようにassert文とif文には明確な違いがあるので気をつけましょう。

if文についてはこちらの記事でも詳しく解説しています!

https://www.tech-teacher.jp/blog/python-if/

assert文とunittestの違い

Pythonにはテストを行うためのクラス「unittest」が用意されています。「unittest」とは、Pythonに標準搭載されているテスト用のツールで、プログラムを記述したあとに正しく動作するかのテストを行えます。

プログラムの規模が大きかったり、ユーザー定義関数が多くなったりする場合、ひとつひとつテストしていくのは大変です。unittestを使用すると複数のテストをまとめて実行できるため便利ですよ。

unittestは次のように利用します。

1.  #例として和を計算する関数を使用
2.  def addition ( x , z ) :
5.  return x + z6.  #正しく実行されているか確認
7.  import unittest10. class addition ( unittest . TestCase ) :
14.  def test _ addition ( self ) :
17.   value1 = 25
18.   value2 = 75
19.   expected = 100
20.  actual =addition ( value1 , value2 )
21.   self . assertEqual ( expected , actual )
22.
23. if __name__ == “__main__” :
34.  unittest . main ( )

assert文とunittestの違いはテストケースを作成して実行するかどうかです。

assertを使用する上での注意点

assert文を使用する上では、注意すべき点が2つあります。

  • assert文はエラー処理ではない
  • assertの有無がプログラムに影響しないようにする

それでは詳しく説明していきます。

assert文はエラー処理ではない

これまで説明したように、少しでもプログラムが想定外の動作をした場合にはassert文がエラーを返します。
しかし、エラーを返すだけでエラー処理を行うものではないので注意しましょう。

そのため、例外が投げられた場合には開発者自身が戻り値をチェックしたりエラー処理をしたりするなどの対応をする必要があります。

assertの有無がプログラムに影響しないようにする

assert文はアサーションを有効化した場合、つまりプログラムが正常に動作しているかチェックする方法が有効な時にのみ実行されるようになっています。

そのため、プログラムの実行結果がassertの有無によって変わらないように注意しなければなりません。assertが有効化された場合とされていない場合でローカル変数の値が変化しないように注意しましょう。

まとめ

今回はassert文の基礎知識や使い方、さらにはif文やunittestとの違いについて説明してきましたがいかがでしたでしょうか。

今回説明した要点をまとめると以下のようになります。

  • assert文は条件をテストするデバッグ支援ツール
  • 構文は「assert 条件式 , エラーメッセージ」
  • 無効にするには「 -O 」を使用
  • unittestとの違いはテストケースを実行してテストを行うかどうか
  • assert文はエラー処理を行わない
  • assertの有無がプログラムに影響しないように注意

assert文を使用することで簡単にテストを行うことができます。個人で開発を行う際は意識する必要はありませんが、プログラムを商品として扱ったり会社に所属して開発を行ったりする際には必須の知識となっています。しっかり理解を深めて動作確認に役立ててください。

このブログでは他にもPythonの学習に役立つ情報を発信しています!ぜひご覧ください。

Pythonで人工知能を開発するには?初心者におすすめの方法を解説Pythonで人工知能開発を行いたいが、何から始めたら良いのか分からない、という方はいますか。本記事ではPythonでの人工知能開発方法を解説します。人工知能開発に興味がある方はぜひお読みください。...

https://www.tech-teacher.jp/blog/python_appdevelopment/

https://www.tech-teacher.jp/blog/python-blockchain/