为什么“if-else-break”在 python 中中断?

新手上路,请多包涵

我正在尝试使用 if-else 表达式,它应该在 if 条件失败时中断循环,但出现 invalid syntax 错误。

示例代码:

 a = 5
while True:
    print(a) if a > 0 else break
    a-=1

当然,如果我以传统方式书写(不使用单行),它就可以工作。

else 关键字后使用 break 命令有什么问题?

原文由 Manish Goel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 559
2 个回答

如果我运行它,我会收到以下错误:

 ...     print(a) if a > 0 else break
  File "<stdin>", line 2
    print(a) if a > 0 else break
                               ^
SyntaxError: invalid syntax

这是因为

print(a) if a > 5 else break

是一个 三元运算符。三元运算符 没有 if 语句。这些使用语法:

 <expr1> if <expr2> else <expr3>

相当于 一个“虚函数”:

 def f():
    if <expr2>:
        return <expr1>
     else:
         return <expr3>

所以这意味着 else 旁边的部分应该是一个 表达式break 不是一个表达式,它是一个语句。所以 Python 不期望那样。你 不能 return break

python-2.x 中, print 也不是函数。因此 print 语句会出错。在 python-2.x print 是一个关键字。

您可以将代码重写为:

 a = 5
while True:
    if a > 5:
        print(a)
    else:
        break
    a -= 1

您可以在 文档PEP-308 中阅读更多相关信息。

原文由 Willem Van Onsem 发布,翻译遵循 CC BY-SA 3.0 许可协议

If 是一个表达式, break 类似于 return 是一个语句。你不能在一个句子中使用两个语句(除非你使用一个难看的分号)。 我知道如果我们能做到这一点会很酷,但遗憾的是,事情就是这样。

原文由 hspandher 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题