it-roy-ru.com

Что означает «Синтаксическая ошибка: отсутствуют скобки в вызове print» в Python?

Когда я пытаюсь использовать оператор print в Python, он выдает мне эту ошибку:

>>> print "Hello, World!"
  File "<stdin>", line 1
    print "Hello, World!"
                        ^
SyntaxError: Missing parentheses in call to 'print'

Что это значит?

357
ncoghlan

Это сообщение об ошибке означает, что вы пытаетесь использовать Python 3 для следования примеру или запустить программу, которая использует оператор Python 2 print:

print "Hello, World!"

Выражение выше не работает в Python 3. В Python 3 вам необходимо добавить круглые скобки вокруг значения, которое будет напечатано:

print("Hello, World!")

"SyntaxError: Отсутствуют скобки при вызове" print "" - это новое сообщение об ошибке, которое было добавлено в Python 3.4.2, главным образом, чтобы помочь пользователям, которые пытаются следовать Python 2 учебник при запуске Python 3.

В Python 3 значения печати изменились с того, что они стали отчетливым оператором, и стали обычным вызовом функции, поэтому теперь нужны скобки:

>>> print("Hello, World!")
Hello, World!

В более ранних версиях Python 3 интерпретатор просто сообщает об общей синтаксической ошибке, не предоставляя полезных советов о том, что может быть не так:

>>> print "Hello, World!"
  File "<stdin>", line 1
    print "Hello, World!"
                        ^
SyntaxError: invalid syntax

Что касается почемуprint стала обычной функцией в Python 3, которая не имела отношения к базовой форме оператора, а скорее к тому, как вы делали более сложные вещи, такие как печать нескольких элементы в stderr с завершающим пробелом, а не с окончанием строки.

В Python 2:

>>> import sys
>>> print >> sys.stderr, 1, 2, 3,; print >> sys.stderr, 4, 5, 6
1 2 3 4 5 6

В Python 3:

>>> import sys
>>> print(1, 2, 3, file=sys.stderr, end=" "); print(4, 5, 6, file=sys.stderr)
1 2 3 4 5 6

Начиная с выпуска Python 3.6.3 в сентябре 2017 года, некоторые сообщения об ошибках, связанные с синтаксисом печати Python 2.x, были обновлены, чтобы рекомендовать их Python 3 .x аналоги:

>>> print "Hello!"
  File "<stdin>", line 1
    print "Hello!"
                 ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?

Поскольку случай "Отсутствие скобок в вызове для печати" является синтаксической ошибкой времени компиляции и, следовательно, имеет доступ к необработанному исходному коду, он может включить полный текст в оставшуюся часть строки в предложенную замену. Однако в настоящее время он не пытается выработать соответствующие кавычки для размещения вокруг этого выражения (это не невозможно, просто достаточно сложно, чтобы это не было сделано).

TypeError, поднятое для оператора правого сдвига, также было настроено:

>>> print >> sys.stderr
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for >>: 'builtin_function_or_method' and '_io.TextIOWrapper'. Did you mean "print(<message>, file=<output_stream>)"?

Поскольку эта ошибка возникает при выполнении кода, а не при его компиляции, он не имеет доступа к необработанному исходному коду и, следовательно, использует мета-переменные (<message> и <output_stream>) в предложенном выражении замены вместо того, что бы пользователь на самом деле набрал. В отличие от случая синтаксической ошибки, в пользовательское сообщение об ошибке сдвига вправо поместить кавычки вокруг выражения Python просто.

564
ncoghlan

К сожалению, старый xkcd comic больше не полностью обновлен.

https://imgs.xkcd.com/comics/python.png

Начиная с Python 3.0 вы должны написать:

print("Hello, World!")

И кто-то еще должен написать эту библиотеку antigravity :(

19
Christian

Синтаксис изменился с Python 2 на Python 3. В Python 2,

print "Hello, World!" 

будет работать, но в Python 3 используйте круглые скобки как

print("Hello, World!")

Это эквивалентный синтаксис Scala и ​​близко к Java.

14
Sagar balai

Если ваш код должен работать как в Python 2, так и в 3, вы можете добиться этого, загрузив его в начале вашей программы:

from __future__ import print_function   # If code has to work in Python 2 and 3!

Затем вы можете напечатать Python 3 способом:

print("python")

Если вы хотите напечатать что-то без создания новой строки - вы можете сделать это:

for number in range(0, 10):
    print(number, end=', ')
3
Lukasz

В Python 3 вы можете печатать только как:

print("STRING")

Но в Python 2 круглые скобки не обязательны.

3
Larry

Помимо прямых ответов здесь, следует отметить другое ключевое различие между python 2 и 3. --- официальный python wiki относится почти ко всем основным различия и фокусируется на том, когда вы должны использовать любую из версий. Этот пост в блоге также хорошо объясняет текущую python вселенную и каким-то образом нерешенную задачу перехода к python 3.

Насколько я могу судить, вы начинаете изучать язык python. Вы должны рассмотреть вышеупомянутые статьи, прежде чем продолжить по маршруту python 3. Вам нужно будет не только изменить часть своего синтаксиса, но и подумать о том, какие пакеты будут вам доступны (преимущество python 2), и о возможных оптимизациях, которые могут быть сделаны в вашем коде ( преимущество python 3).

1
Chad Van De Hey