正如Python wiki断言所建议的
但是使用断言和使用' if&#39>之间的优势在哪里?接下来提出例外的陈述?
例如。
def some_domain_operation(user, invoice):
assert isinstance(user, (User, int))
# Do something.
VS
def some_domain_operation(user, invoice):
if not isinstance(user, (User, int)):
raise ValueError()
# Do something.
我认为使用断言是不可靠的(可以被用户禁用),所以我不能给出一个很好的例子,当使用断言比使用明确的'如果'更好。与raise next
。
你对断言Pn python有什么看法?他们是拐杖吗?
答案 0 :(得分:1)
在我看来,if
和assert
之间存在很大差异:
assert
之后的表达式永远不会为真[1]。如果确实如此,你的程序也可能会停止执行,因为我们不知道什么是真的。 [2]它们只是为查看源代码的开发人员提供的调试和文档帮助。
从字面上看,一个断言说“在程序流程的这一点上确实如此。在任何情况下,这个表达式都不会评估为假”。
因此,assert
应被视为不变量。在正确编写的模块中,不会遇到assert
。如果我们考虑你的情况:
assert isinstance(user, (User, int))
如果禁用此assert
会改变模块的行为,则不应再为assert
,而是提升TypeError
。
[1] ...在一个表现良好,写得正确的程序中。
[2]你应该从不抓住AssertionError
,除非你需要抓住AssertionError