首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果断言传递,是否计算Python断言消息?

如果断言传递,是否计算Python断言消息?
EN

Stack Overflow用户
提问于 2020-12-03 20:56:21
回答 1查看 169关注 0票数 1

假设我有一个具有计算量很大的错误消息的assert语句(例如,进行几次网络或数据库调用)。

代码语言:javascript
复制
assert x == 5, f"Some computationally heavy message here: {requests.get('xxx')}"

我还可以使用if语句编写这段代码:

代码语言:javascript
复制
if x != 5:
    raise AssertionError(f"Some computationally heavy message here: {requests.get('xxx')}")

我知道后一个选项只有在x != 5时才会评估错误消息。那前一种选择呢?我是这么想的,但我不确定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-03 21:00:18

否,如果断言的条件为真,则不计算,后的表达式:

代码语言:javascript
复制
>>> assert 1 == 5, foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined

但是:

代码语言:javascript
复制
>>> assert 5 == 5, foo

不引发NameError

根据语言参考的说法

扩展形式assert expression1, expression2等价于 如果__debug__:如果不是expression1:举起AssertionError(expression2)

和一个语句

…通过逐个计算表达式来准确地选择一个套件,直到找到真正的…为止。;然后执行(不执行或计算if语句的其他部分)

因此,这似乎是必要的行为。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65134017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档