我試圖使用if-else表達式,如果if
條件失敗,但得到一個invalid syntax
錯誤,應該打破循環。爲什麼「if-else-break」在python中斷?
示例代碼:
a = 5
while True:
print(a) if a > 0 else break
a-=1
當然,如果我寫的傳統方式(不使用一個襯墊)它的工作原理。
請讓我知道在else
關鍵字後面使用break
命令有什麼問題。
我試圖使用if-else表達式,如果if
條件失敗,但得到一個invalid syntax
錯誤,應該打破循環。爲什麼「if-else-break」在python中斷?
示例代碼:
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>
這是相當於到「虛擬功能」:
def f():
if <expr2>:
return <expr1>
else:
return <expr3>
因此,這意味着部分旁邊else
應該是一個表達。 break
是不是表達式,這是一個聲明。所以Python不期望這一點。您不能return
a break
。
在python-2.x,print
也不是一個函數。所以這個錯誤與print
聲明有關。在python-2.xprint
是一個關鍵字。
你可以重寫你的代碼:
a = 5
while True:
if a > 5:
print(a)
else:
break
a -= 1
您可以在documentation和PEP-308瞭解更多關於這一點。
有關[docs](https://docs.python.org/3/reference/expressions.html#conditional-expressions)和[PEP308](https://www.python.org)的更多信息/ dev/peps/pep-0308 /) – Kendas
@Kendas:謝謝。我在答案中包含了參考文獻。 –
If
是一個表達式,break
類似於return
是一個聲明。你不能在一個句子中使用兩個語句(除非你使用了一個醜陋的分號)。 我知道如果我們能夠做到這一點,那將會非常酷,但可惜的是,事情就是這樣。
Willem Van Onsem的答案有很多有用的信息,但我喜歡這個答案在實際應用中的清晰性和易用性;只記得你不能在一個句子中使用兩個語句更容易。 –
簡而言之,您濫用'單行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
- 完全有效的,但可能不是你平時想什麼),然後break
,這不不評估任何事情,因爲它是statement (action), not an expression (value),因此invalid syntax
錯誤。
因此,如果您想根據條件執行兩條語句中的一條,那麼您確實需要由威廉·範·翁塞姆提出的多線解決方案 。在一行中可能會有一些黑客行爲,但多行是Python中常見的解決方案。
在這個例子中,你將如何擺脫這樣的循環? – WhatsThePoint
@WhatsThePoint進行了編輯。 –
是的..有兩個錯別字,(true代替true,'a> 5'代替'a> 0')。修正它們。感謝提及:) –