小编典典

使用断言的最佳实践?

all

  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/finallyso 的情况下进行检查,如果在整个代码中的任何时间x小于 0,则会引发错误,例如,如果您assert x < 0在函数的开头设置,则在函数内的任何位置哪里x变得小于 0 引发异常?

阅读 127

收藏
2022-03-09

共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
2022-03-09