1. ホーム
  2. python

[解決済み] アサートの使用に関するベストプラクティス?

2022-03-17 02:44:47

質問

  1. を使用すると、パフォーマンスやコードのメンテナンスに問題がありますか? assert をデバッグのためだけに使用するのではなく、標準的なコードの一部として使用しますか?

    です。

    assert x >= 0, 'x is less than zero'
    
    

    よりも良いまたは悪い

    if x < 0:
        raise Exception, 'x is less than zero'
    
    
  2. また、次のようなビジネスルールを設定する方法はありますか? if x < 0 raise error を使用せずに常にチェックされます。 try/except/finally ということで、もしコード中のいつでも x が0より小さい場合、エラーが発生します。 assert x < 0 を関数の先頭で使用する場合、関数内の任意の場所で x が0より小さくなると例外が発生するのですか?

解決方法は?

関数全体でxが0より小さくなったときに自動的にエラーを投げることができるようにすること。そのためには クラス記述子 . 以下はその例です。

class LessThanZeroException(Exception):
    pass

class variable(object):
    def __init__(self, value=0):
        self.__x = value

    def __set__(self, obj, value):
        if value < 0:
            raise LessThanZeroException('x is less than zero')

        self.__x  = value

    def __get__(self, obj, objType):
        return self.__x

class MyClass(object):
    x = variable()

>>> m = MyClass()
>>> m.x = 10
>>> m.x -= 20
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "my.py", line 7, in __set__
    raise LessThanZeroException('x is less than zero')
LessThanZeroException: x is less than zero