假设我有一个具有计算量很大的错误消息的assert语句(例如,进行几次网络或数据库调用)。
assert x == 5, f"Some computationally heavy message here: {requests.get('xxx')}"我还可以使用if语句编写这段代码:
if x != 5:
raise AssertionError(f"Some computationally heavy message here: {requests.get('xxx')}")我知道后一个选项只有在x != 5时才会评估错误消息。那前一种选择呢?我是这么想的,但我不确定。
发布于 2020-12-03 21:00:18
否,如果断言的条件为真,则不计算,后的表达式:
>>> assert 1 == 5, foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined但是:
>>> assert 5 == 5, foo不引发NameError。
根据语言参考的说法
扩展形式
assert expression1, expression2等价于 如果__debug__:如果不是expression1:举起AssertionError(expression2)
和一个语句
…通过逐个计算表达式来准确地选择一个套件,直到找到真正的…为止。;然后执行(不执行或计算if语句的其他部分)。
因此,这似乎是必要的行为。
https://stackoverflow.com/questions/65134017
复制相似问题