我正在尝试使用if-else表达式,如果if
条件失败,它会导致循环中断,但会出现invalid syntax
错误。
示例代码:
a = 5
while True:
print(a) if a > 0 else break
a-=1
当然,如果我用传统的方式写作(不使用一个班轮),它就可以了。
请告诉我在break
关键字后使用else
命令有什么问题。
答案 0 :(得分:16)
如果我运行此命令,则会收到以下错误:
... 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
是三元运算符。三元运算符 no 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
您可以在documentation和PEP-308。
中详细了解相关信息答案 1 :(得分:5)
If
是一个表达式,break
类似于return
是一个声明。你不能在一个句子中使用两个语句(除非你使用一个丑陋的分号)。 我知道如果我们能够做到这一点真的很酷,但唉,就是这样。
答案 2 :(得分:1)
用稍微简单的术语来说,你误用了'一行if
语句'(ternary operator)。它总是评估为表达式(即值)。也就是说,
<expr1> if <condition> else <expr2>
如果<expr1>
为<condition>
,则评估为True
;如果<expr2>
为<condition>
,则评估为False
。然后可以像使用任何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()
的定义,始终返回None
- 完全有效,但可能不是您通常想要的那样)然后{{ 1}},不评估任何内容,因为它是statement (action), not an expression (value),因此break
错误。
因此,如果你想根据条件执行两个语句中的一个,你真的需要提出的多行解决方案 Willem Van Onsem。可能有一些hacky方法可以在一行中完成,但多行是Python中常见的解决方案。