Что означает "SyntaxError: Отсутствие скобок в вызове" print "означает в Python?

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

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

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

Ответ 1

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

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 в сообщении об ошибке пользовательского сдвига вправо.

Ответ 2

К сожалению, старый комикс xkcd не совсем обновлен.

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

Начиная с Python 3.0 вам нужно написать:

print("Hello, World!")

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

Ответ 3

Существует изменение в синтаксисе с Python 2 на Python 3. В Python 2

print "Hello, World!" 

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

print("Hello, World!")

Это эквивалентный синтаксис для Scala и рядом с Java.

Ответ 4

Если ваш код должен работать как на 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=', ')

Ответ 5

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

print("STRING")

Но в Python 2 скобки не нужны.

Ответ 6

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

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

Ответ 7

В основном, начиная с Python 3.x, вам нужно использовать print с круглыми скобками.

Python 2.x: печать "Властелин колец"

Python 3.x: печать ("Властелин колец")


Explaination

print было оператором в 2.x, но это функция в 3.x. Теперь для этого есть ряд веских причин.

  1. С функциональным форматом Python 3.x больше гибкости достигается при печати нескольких элементов через запятую.
  2. Вы не можете использовать аргументы с утверждением. В 3.x, если у вас есть список элементов, которые вы хотите распечатать с разделителем, вы можете сделать это:
>>> items = ['foo', 'bar', 'baz']
>>> print(*items, sep='+') 
foo+bar+baz
  1. Вы не можете переопределить утверждение. Если вы хотите изменить поведение печати, вы можете сделать это, когда она является функцией, а не когда она является оператором.