meade meade - 1 month ago 14
Python Question

Best practice for Python Assert


  1. Is there a performance or code maintenance issue with using
    assert
    as part of the standard code instead of using it just for debugging purposes?

    Is

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


    better or worse than

    if x < 0:
    raise Exception, 'x is less than zero'

  2. Also, is there any way to set a business rule like
    if x < 0 raise error
    that is always checked without the
    try/except/finally
    so, if at anytime throughout the code
    x
    is less than 0 an error is raised, like if you set
    assert x < 0
    at the start of a function, anywhere within the function where
    x
    becomes less then 0 an exception is raised?


Answer

To be able to automatically throw an error when x become less than zero throughout the function. You can use class descriptors. Here is an example:

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
Comments