Почему я получаю SyntaxError в интерпретаторе Python? - PullRequest
2 голосов
/ 30 марта 2010

Этот код работает, когда я пробую его из файла .py, но не работает в интерпретаторе командной строки и в режиме ожидания.

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

Я использую Python 2.6

Ответы [ 3 ]

5 голосов
/ 30 марта 2010

В Python 3 print является функцией, а не оператором, поэтому вам понадобятся круглые скобки вокруг аргументов, как в print("continue"), если вы использовали Python 3., указывает на более раннюю позицию, чем это было бы в Python 3, поэтому вместо этого вы должны использовать Python 2.x.В этом случае ошибка заключается в том, что вы вводите это в интерактивном интерпретаторе, и ему требуется небольшая «помощь», чтобы выяснить, что вы пытаетесь сказать.Введите пустую строку после предыдущего блока, чтобы он мог правильно расшифровать отступ, как показано ниже:

>>> try:
...     fsock = open("/bla")
... except IOError:
...     print "Caught"
...
(some output shows here)
>>> print "continue"
4 голосов
/ 30 марта 2010

Вам нужно оставить пустую строку, чтобы закрыть блок except. ... указывает, что он все еще пытается поместить код в этот блок, даже если вы отступили. Это всего лишь причуда интерактивного переводчика.

2 голосов
/ 30 марта 2010

Попробуйте это в переводчике:

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

print "continue"

Важным здесь является пустая строка после отступа. Я использую интерпретатор Python 2.6, и он выдает ту же синтаксическую ошибку, что и вы.

Это потому, что интерпретатор ожидает отдельные блоки, разделенные пустыми строками. Кроме того, пустая строка (два символа новой строки) указывает на конец блока и на то, что интерпретатор должен его выполнить.

...