小编典典

Python断言的最佳实践

python

  1. assert作为标准代码的一部分而不是仅用于调试目的,是否存在性能或代码维护问题?

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

胜过或坏于

    if x < 0:
    raise Exception, 'x is less than zero'
  1. 此外,是否有任何方法可以设置业务规则,例如if x < 0 raise error始终不进行检查,try/except/finally因此在整个代码中的任何时候都x小于0时,都会引发错误,例如,如果您assert x < 0在函数的开始处,函数内的任何位置进行设置哪里x变得小于0引发异常?

阅读 179

收藏
2020-12-20

共1个答案

小编典典

为了能够在整个函数中x小于零时自动引发错误。您可以使用类描述符。这是一个例子:

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
2020-12-20