为什么 "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
.
在 python-2.x, print
was not a function either. So this would error with the print
statement. In python-2.x 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.
中此类事情的常用解决方案
我正在尝试使用 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
.
在 python-2.x, print
was not a function either. So this would error with the print
statement. In python-2.x 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.
中此类事情的常用解决方案