使用assert
作为标准代码的一部分而不是仅用于调试,是否存在性能或代码维护问题?
是
assert x >= 0, 'x is less than zero'
好或坏于
if x < 0:
raise Exception, 'x is less than zero'
此外,是否有任何方法可以设置像if x < 0 raise error
这样的业务规则,该规则总是在没有try/except/finally
的情况下检查的,因此,如果在整个代码中x
小于0的任何时间,都会引发错误,就像在函数开始时设置assert x < 0
,在函数中x
小于0的任何地方,都会引发异常?
断言应用于测试不应该发生的条件。目的是在程序状态损坏的情况下尽早崩溃。
异常应该用于可能发生的错误,并且几乎总是应该创建自己的异常类。
例如,如果要将函数从配置文件中读取到
dict
,则文件中的不正确格式将引发ConfigurationSyntaxError
,而您可以assert
返回None
。在您的示例中,如果
x
是通过用户界面或外部源设置的值,则异常是最好的。如果
x
只由您自己的代码在同一程序中设置,请使用断言。当x在整个函数中小于零时,能够自动抛出错误。您可以使用class descriptors。下面是一个例子:
优化编译时将删除“assert”语句。所以,是的,在性能和功能上都有差异。
如果使用
assert
来实现应用程序功能,然后优化部署到生产环境,那么您将受到“但它在开发环境中工作”缺陷的困扰。见PYTHONOPTIMIZE和-O -OO
相关问题 更多 >
编程相关推荐