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

Why "if-else-break" breaks in python?

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

示例代码:

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

当然,如果我用传统的方式写(不使用一个衬里)它是有效的。

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

如果我运行这个,我得到以下错误:

...     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>

等价于 "virtual function":

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

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

, print was not a function either. So this would error with the print statement. In print 是一个关键字。

您可以将代码重写为:

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

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

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

简单来说,您误用了 'one-line if statement' (ternary operator)。它的计算结果总是 expression(即一个值)。也就是说,

<expr1> if <condition> else <expr2>
如果 <condition>True

计算为 <expr1>,如果 <condition>False,则计算为 <expr2>。然后可以像任何 Python 值一样使用此结果值,例如:

y = 0
x = (5 if (y > 0) else 6)
print(x) # 6

当然,括号完全没有必要(甚至不鼓励),但希望对理解该行的含义有用。

因此,

print(a) if a > 0 else break

尝试计算 print(a)(根据 Python 3 中 print() 的定义,总是 returns None – 完全有效,但可能不是你通常想要的)然后 break,它不计算任何东西,因为它是 statement (action), not an expression (value),因此 invalid syntax 错误。

因此,如果你想根据条件执行两个语句之一,你真的需要提出的多行解决方案 威廉范昂塞姆。在一行中可能有一些 hacky 方法,但多行是 Python.

中此类事情的常用解决方案