Вопрос-Ответ

What does "SyntaxError: Missing parentheses in call to 'print'" mean in Python?

Что означает "SyntaxError: пропущенные круглые скобки при вызове 'print'" в Python?

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

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

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


Смотрите Получение SyntaxError для печати с ключевым аргументом end= ' ' для противоположной проблемы.

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

Переведено автоматически
Ответ 1

Это сообщение об ошибке означает, что вы пытаетесь использовать 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!")?

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

Значение 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>)"?

Since this error is raised when the code runs, rather than when it is compiled, it doesn't have access to the raw source code, and hence uses meta-variables (<message> and <output_stream>) in the suggested replacement expression instead of whatever the user actually typed. Unlike the syntax error case, it's straightforward to place quotes around the Python expression in the custom right shift error message.

Ответ 2

Unfortunately, the old xkcd comic isn't completely up to date anymore.

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

Since Python 3.0 you have to write:

print("Hello, World!")

And someone has still to write that antigravity library :(

Ответ 3

There is a change in syntax from Python 2 to Python 3.
In Python 2,

print "Hello, World!" 

will work but in Python 3, use parentheses as

print("Hello, World!")

This is equivalent syntax to Scala and near to Java.

Ответ 4

In Python 3.x, print is now a function, rather than a statement as it was in 2.x.

Therefore, print is used by calling it as a function, and thus parentheses are needed:

Python 2.x: print "Lord of the Rings"

Python 3.x: print("Lord of the Rings")

There are multiple advantages to making print a function:


  • The print function offers more flexibility when printing multiple values (which are now arguments to the function). In particular, it allows for argument splatting:

>>> items = ['foo', 'bar', 'baz']
>>> print(*items, sep='+')
foo+bar+baz

  • The behavior of calls to print can be replaced by simply writing a new function named print. This would be impossible with the print statement.

2023-07-05 02:23 python python-3.x