この記事では、Pythonのassert文を使ってデバッグする方法を解説します。
assert
文は、条件式がFalse
の場合に例外を投げます。なので、想定外のことが起こった場合に即座に例外を送出させることができます。
では、assert
文の使い方を詳しく見ていきましょう!
assert文の使い方
assert
文は、assert
キーワードと条件式を組み合わせて使います。指定した条件式がFalse
の場合にAssertionError
が送出され、プログラムが終了します。
assert 条件式
エラーメッセージを指定することでAssertionError
が送出された際のエラーメッセージを指定できます。
assert 条件式, エラーメッセージ
条件式がTrue
だった場合は特に何もしません。
サンプル
以下のコードでは、受け取った値の型を調べてint
型以外ならエラーを発生させます。
main.py
num = '1'
assert isinstance(num, int), 'int型ではありません'
実行結果
Traceback (most recent call last):
File "main.py", line 3, in
assert isinstance(num, int), 'int型ではありません'
AssertionError: int型ではありません
try文と組み合わせる
try
文と組み合わせることで例外処理することができます。 自らif
文を書かなくてもいいのでraise
よりもassert
文の方が簡潔に記述できます。
その代わり送出できる例外はAssertionError
だけですが...。
try:
num = '1'
assert isinstance(num, int), 'int型ではありません'
except AssertionError as e:
print(f'エラー発生: {e}')
実行結果
エラー発生: int型ではありません
assert文を無視する
assert
文は、組み込み定数__debug__
がTrue
の時に実行されるようになっており、以下のようなコードと等価です。
# エラーメッセージを指定しない場合
if __debug__:
if not 条件式: raise AssertionError
# エラーメッセージを指定する場合
if __debug__:
if not 条件式: raise AssertionError(エラーメッセージ)
つまりは__debug__
をFalse
にすることでソースコード内に定義されている全てのassert
文を無視することができます。
__debug__
をFalse
にするには、Pythonコマンドでコードを実行する際に、コマンドラインオプション-O
、または-OO
を付けて実行します。
main.py
print('start')
assert False, '処理されれば確実にエラーを発生させる'
print('end')
コマンドラインから実行
$ python -O main.py
start
end
これで定義しているすべてのassert
文を無視することができます。
ちなみに、__debug__
は再代入することができません。代入しようとするとSyntaxError
が発生するので注意してください。
__debug__ = False
実行結果
File "/Users/user/Desktop/Python/test.py", line 1
__debug__ = False
^
SyntaxError: cannot assign to __debug__
まとめ
この記事では、Pythonのassert
文の使い方を解説しました。
assert
文を使うことで簡単にデバッグを行うことができました。定義したassert
文は実行時にすべて無視することができるので楽チンですね。
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ