Pythonのアサーション(assert文)とは?基本構文と使い方をわかりやすく解説
アサーションとは
アサーション(assertion)とは、プログラムのテスト段階で利用でき、テスト完了後にはオフにすることもできる「健全性チェック」の仕組みです。
アサーションは「raise-if 文」(より正確には「raise-if-not 文」)と考えると理解しやすいでしょう。つまり、指定した式を評価し、その結果が偽(False)になった場合に例外を発生させるものです。
Pythonでは、アサーションはassert文によって実行されます。このキーワードはPython 1.5で導入された比較的新しい機能です。
実務では、関数の先頭に配置して入力値の妥当性を確認したり、関数呼び出しの直後に配置して戻り値が期待どおりかを検証したりする目的でよく使われます。
assert文の構文
Pythonがassert文を実行すると、続く式が評価されます。式が真であれば何も起こらず処理が続行されますが、式が偽と評価された場合はAssertionError例外が発生します。
assert文の基本的な構文は次のとおりです。
assert Expression[, Arguments]
アサーションが失敗した場合、Argumentsに指定した式がAssertionErrorの引数として渡され、エラーメッセージとして表示されます。AssertionErrorは他の例外と同様にtry-except文で捕捉して処理できますが、特に処理を行わなかった場合はプログラムが終了し、トレースバックが出力されます。
サンプルコード:ケルビンから華氏への変換
以下は、ケルビン温度を華氏温度に変換する関数の例です。0ケルビン(絶対零度)よりも低い温度は物理的に存在しないため、負の温度が渡された場合にはアサーションによって処理を中断します。
#!/usr/bin/python
def KelvinToFahrenheit(Temperature):
assert (Temperature >= 0), "Colder than absolute zero!"
return ((Temperature - 273) * 1.8) + 32
print KelvinToFahrenheit(273)
print int(KelvinToFahrenheit(505.78))
print KelvinToFahrenheit(-5)※上記のコードはPython 2の記法(print文)を使用しています。Python 3では print() 関数形式で記述してください。
実行結果
上記のコードを実行すると、次のような結果になります。
32.0
451
Traceback (most recent call last):
File "test.py", line 9, in <module>
print KelvinToFahrenheit(-5)
File "test.py", line 4, in KelvinToFahrenheit
assert (Temperature >= 0), "Colder than absolute zero!"
AssertionError: Colder than absolute zero!最初の2つの呼び出し(273ケルビン、505.78ケルビン)は正常に処理され「32.0」「451」が出力されます。一方、3つ目の呼び出しでは負の温度(-5)が渡されたためアサーションが失敗し、AssertionErrorが発生してプログラムが停止します。
補足:アサーション活用のポイント
- Pythonを-Oオプション(最適化モード)で実行すると、assert文はすべて無視されます。開発時にはチェックを有効にし、本番環境ではオーバーヘッドなしで動作させる、といった運用が可能です。
- ユーザー入力の検証など、本番環境でも常に行うべきエラー処理は、assertではなく通常の例外処理(
raise/try-except)を使うことが推奨されます。
-
Pythonでif...elseステートメントを正しくインデントする方法
Pythonの大きな特徴のひとつは、統一されたインデント(字下げ)によって文のブロックを表現するという点です。他の多くの言語では波括弧 { } などでブロックを囲みますが、Pythonではインデントそのものが構文の一部となります。ブロックはコロン(:)記号によって開始されます。if文などの末尾にコロンを入力してEnterキーを押すと、Pythonに対応したエディタであれば、自動的にカーソルが次の行へ移動し、インデントが一段深くなります。その後に入力する行はすべて同じインデントレベルが維持されます。ブロックを終了したい場合は、Backspaceキーを押してインデントレベルを一段戻します。この手順
-
Pythonのassertステートメントとは?基本構文と使い方を解説
Pythonのassertステートメントとは Pythonのassertステートメントは、プログラム内で開発者が定義した条件(制約)が正しく満たされているかを確認するための仕組みです。主にデバッグ目的で使用され、スクリプトの冒頭などに記述して、前提条件が成り立っているかどうかを検証します。 基本構文 assertステートメントは、以下のような構文で記述します。 assert <some_test>, <message> この行は次のように読み解けます。「もし<some_test>がFalseと評価された場合、例外が発生し、<message>が出