簡體   English   中英

為什么在 Python 解釋器中出現 SyntaxError?

[英]Why am I getting a SyntaxError in the Python interpreter?

當我從 .py 文件中嘗試時,此代碼有效,但在命令行解釋器和空閑時失敗。

>>> try:
...     fsock = open("/bla")
... except IOError:
...     print "Caught"
... print "continue"
  File "<stdin>", line 5
    print "continue"
        ^
SyntaxError: invalid syntax

我正在使用 python 2.6

使用Python 3, print是一個函數而不是語句,因此如果使用Python 3,則需要圍繞參數使用括號,如print("continue")

但是,插入符指向比Python 3更早的位置,所以你必須使用Python 2.x。 在這種情況下,錯誤是因為您在交互式解釋器中輸入此錯誤,並且需要一些“幫助”來弄清楚您要告訴它的內容。 在上一個塊之后輸入一個空行,以便它可以正確解密縮進,如下所示:

>>> try:
...     fsock = open("/bla")
... except IOError:
...     print "Caught"
...
(some output shows here)
>>> print "continue"

您需要留下一個空行來關閉except塊。 ...表示它仍在嘗試將代碼放入該塊中,即使您喜歡它。 這只是交互式解釋器的一個怪癖。

在解釋器中嘗試這個:

try:
    fsock = open("/bla")
except IOError:
    print "Caught"

print "continue"

這里重要的是縮進后的空行。 我正在使用python 2.6解釋器,它會拋出與您相同的語法錯誤。

這是因為解釋器需要用空行分隔的單個塊。 另外,空白行(兩個新行字符)表示塊的結束,並且解釋器應該執行它。

與 if/else 或 for 或 while 一樣,try/except 是復合語句。 在 Python shell 提示符中,控制關鍵字: ... 后面的語句需要縮進,因為語句或復合語句是一一執行的。 您的最后一個 print("continue") 與頂級 try: 對齊,並考慮了另一個語句因此語法錯誤。 如果您想以交互方式測試 try/except/else/finally,可以將它們包裝在 function 中:

>>> def t():
...     try:
...             print(x)
...     except:
...             print('exception')
...             return
...     finally:
...             print('finally')
...     print('continue')
...     print('end function t()')
...
>>> t()
exception
finally
>>> x = 99
>>> t()
99
finally
continue
end function t()
>>>

這是通過 Windows python shell 完成的。 當我在 PyCharm IDE python 控制台上嘗試時,它允許在復合語句之后再執行一條語句。

>>> n = 0
>>> while n!= 5:
...    n+=1
... print('n = {}'.format(n)) 
n = 5   # no syntax error
>>>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM