[解決!Python]assert文でプログラム実行時に特定の条件が満たされているかどうかを確認するには解決!Python

Pythonのassert文はプログラムの実行時に、特定の箇所で特定の条件が満たされているかどうかをチェックして、満たされていなければ例外を発生させる。その基本的な使い方を紹介する。

» 2023年08月29日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「解決!Python」のインデックス

連載目次

# assert文の基本的な使い方
def myfunc(x):
    assert x > 0
    return x * 2

print(myfunc(10))  # OK
print(myfunc(-8))  # NG:AssertionError

# 条件が満たされなかったときにメッセージを伝える
def myfunc(x):
    assert x > 0, 'x must be a positive number.'
    return x * 2

print(myfunc(10))  # OK
print(myfunc(-8))  # NG


assert文

 Pythonのassert文を使用すると、プログラムの(デバッグ)実行時に特定の箇所で特定の条件が満たされているかを調べられる。

  • 「assert 式1, 式2」のように書く。「式1」には成り立つかどうかを調べたい式を、「式2」には「式1」が成り立たなかったとき(値がFalseだったとき)に表示するメッセージを記述する。式1の値がTrue(条件が満たされた)ときには例外が発生することもなく実行はそのまま続けられ(次のコードに制御が移動し)、式1の値がFalse(条件が満たされない)ときにはAssertionError例外が発生する
  • assert文が有効なのはPythonの組み込み定数__debug__がTrueのとき(デフォルト)
  • __debug__をFalseにする(assert文を無効化する)にはPythonの起動時にコマンドラインオプションで-Oもしくは-OOを指定する

 以下に例を示す。

def myfunc(x):
    assert x > 0
    return x * 2

print(myfunc(10))  # OK
print(myfunc(-8))  # NG:AssertionError


 この例では、myfunc関数では何らかの理由によりパラメーターxの値が正数である必要がある。そのことを「assert x > 0」と記述することで示している。

 条件が満たされなかったときに、何らかのメッセージを伝えたいのであれば、2つ目の式を記述する。以下はその例だ。

def myfunc(x):
    assert x > 0, 'x must be a positive number.'
    return x * 2

print(myfunc(10))  # OK
print(myfunc(-8))  # NG


 この例は最初の例に条件が満たされなかったときに表示するメッセージを追加したものだ。こうすると、式1の条件が満たされず、AssertionError例外が発生したときに「x must be a positive number.」というメッセージが表示されるようになる。

 以下は上記のコードをsample.pyという名前のファイルに保存して実行してみた結果だ。最後に「AssertionError: x must be a positive number.」と出力されているのが分かる。

AssertionError例外に追加でメッセージが表示されたところ AssertionError例外に追加でメッセージが表示されたところ

 assert文はPythonの組み込み定数__debug__の値がTrueのときにのみ有効である。__debug__の値はPython処理系の起動時にコマンドラインオプションとして-Oもしくは-OOが指定されたとき以外はTrueとなる。つまり、多くの場合は__debug__の値はTrueとなっている(__debug__への代入は禁止されている)。

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。