4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonのassertを使いこなしたい

Posted at

アサーションとは

アサーション(assertion)とは、プログラムが期待する条件で動いているかチェックする機能のことです。

アサーションを適応することで条件外の挙動が起きた時にAssertionErrorが出力され、デバッグしやすくなるといった特徴があります。

if文との違いは?

if文ではエラーチェックを行えますが、アサーションとの違いは何でしょうか?

エラーチェックはユーザーや外部システムによる予期しない入力や挙動を処理し、アサーションは開発者がコードの振る舞いについて設定した前提条件を確認するために使用されます。

アサーションはプログラムのバグチェックに使えます。アサーションを使うことで早期にプログラム上の重大な欠陥を見つけ出し、修正するのに役立ちます。

構文

基本的にはassertの後ろにチェックしたい式を記述します。

assert expression

また、カンマ区切りで任意のエラー文を出力できます。

def check_age(age):
    assert age >= 0, "Value Error"
    
    return age

check_age(-1)
# Value Error

注意点

assertはデバッグ目的に使用する

基本的にはコードに欠陥がないか開発やデバッグフェーズで利用するものです。運用時には例外処理などのエラーハンドリングを行います。

assertの無効化

Pythonの実行オプションである-0-00を用いることでassert文は無視されます。これはassert

if __debug__:
  if not expression: raise AssertionError

と等価であるためです。組み込み変数__debug__は通常Trueですが、最適化が要求された場合(-0, -00)、にFalseとなります。

常にTrueとなるassert

assert文にタプルを渡したとき、空でなければ常にTrueとなります。したがってタプル内に変数を渡してチェックさせようとした時、常にTrueと判定されることになります。

x = 2
assert (x == 1 , "xに1以外の値が入ってます")

テストケースを作成するときに気を付けないといけないですね。ただしPython3ではSyntaxWarningを表示してくれます。

参考サイト

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?