今回は、Pythonでassert
文の使い方を検証します。
Pythonでは、assert
文はある条件が真であるかどうかを検証するために使用され、構文が使用されます。
assert <condition
もし条件が True
と評価された場合、プログラムは何も異常がなかったかのように実行を続けます。しかし、条件が False
と評価された場合、プログラムは AssertionError
を発生させて終了します。
>>> assert True
上のコードを実行しても、条件が True
と評価されるため、何も起こりません。あるいは、以下の例の条件は False
と評価されます。
>>> assert False
Traceback (most recent call last):
File "<stdin", line 1, in <module
AssertionError
さらにわかりやすくするために、以下のようにアサーション出力に独自のエラーメッセージを追加することができます。
>>> assert False, "This is a custom assertion message!"
Traceback (most recent call last):
File "<stdin", line 1, in <module
AssertionError: This is a custom assertion message!
assert 文は、コード内の変数が正しい値をとるかどうかをチェックし、正しい値をとらない場合はプログラムを終了させたい場合に便利です。これは、プログラムが誤った値で実行され続けると発生し、デバッグが困難になる可能性のあるサイレント障害モードを防ぐのに役立ちます。
ここでは、より意味のある条件を指定したassert文の例を示します。ユーザが入力したフラグ変数が、いくつかの正しい値のいずれかに設定されていることを確認したい場合を考えてみましょう。そうでなければ、プログラムの実行を終了させます。そのためには、次のようにすればよい。
>>> flag = input("Enter a flag (y/n): ")
Enter a flag (y/n): y
>>> assert flag == "y" or flag == "n", "Invalid flag, must be 'y' or 'n'"
上の例では,ユーザはフラグに有効な値を入力したので,エラーは発生しない.しかし、以下の例では、ユーザーの入力が無効であるため、アサーションが投げられます。
>>> flag = input("Enter a flag (y/n): ")
Enter a flag (y/n): b
>>> assert flag == "y" or flag == "n", "Invalid flag, must be 'y' or 'n'"
Traceback (most recent call last):
File "<stdin", line 1, in <module
AssertionError: Invalid flag, must be 'y' or 'n'
このように使用すると、スローされたエラーをキャッチして、カスタムエラーメッセージを出力としてユーザーに表示し、ユーザーが自分のレスポンスを修正できるようになります。これは、APIルートへの入力のアサーションや、ダウンロードしたリソースが適切な情報を含んでいるかどうかのチェックなど、Pythonプログラムにおいて非常に多くの使い道があります。
もう一つの重要な点は、コマンドラインから Python インタープリタや Python スクリプトを実行するときに、 -O
フラグを使うとアサーションを実行せずにプログラムを実行できることです。これは Python インタープリタのデバッグモードをオフにすることで assert ステートメントを無視します。このフラグを使用すると、コードが無効な入力や危険な入力を受け入れることになるので、注意してください。
著者について
この記事は、コードを通じて人々の生活を向上させることに情熱を注ぐソフトウェアコンサルタント兼開発者のJacob Stopakによって書かれました。Jacobは、コードカード – 一般的なコードスニペットを調べ、コピーし、貼り付けるための開発者のための便利なツール – の生みの親です。
</modules