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

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

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

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

11 ответов

Решение

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

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

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

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

print("Hello, World!")

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

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

 print "Hello, World!" will work but

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

print("Hello, World!")

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

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

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

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


Объяснение

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

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

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

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

print("STRING")

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

Я также мог бы просто добавить, что я знал все об изменении синтаксиса между Python2.7 а также Python3, и мой код был правильно написан как print("string") и даже print(f"string")...

Но после некоторого времени отладки я понял, что мой сценарий bash вызывает python, например:

python имя_файла.py

что привело к вызову моего скрипта python по умолчанию с использованием python2.7что дало ошибку. Итак, я изменил свой сценарий bash на:

python3 имя_файла.py

which of coarse использует python3 для запуска скрипта, исправляющего ошибку.

print('Hello, World!')

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

Итак, я получал эту ошибку

      from trp import BoundingBox, Document
File "C:\Users\Kshitij Agarwal\AppData\Roaming\Python\Python39\site-packages\trp\__init__.py", line 31
print ip
      ^ 
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(ip)?

Это ошибка пакета Python, в котором использовался Python2, и вы, вероятно, используете его на Python3.

Одним из решений может быть преобразование Python2 print somethingна Python3 print(something)для каждой строки в каждом файле в папке пакета, что не очень хорошая идея. Я имею в виду, вы можете сделать это, но все же есть лучшие способы.

Для выполнения той же задачи в Python существует пакет 2to3 , который преобразует сценарии Python2 в сценарии Python3. Чтобы установить его, выполните команду в терминале.

      pip install 2to3

Затем измените каталог в терминале на место, где находятся файлы пакета, в моем случае - C:\Users\Kshitij Agarwal\AppData\Roaming\Python\Python39\site-packages\trp

Теперь выполните команду

      2to3 . -w

и вуаля , все файлы Python2 в этом каталоге будут преобразованы в Python3 .

Примечание . Приведенные выше команды справедливы и для других операционных систем. Только путь к пакету Python будет отличаться в зависимости от системы.

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

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

print "text"это не способ печати текста в python, так как это не сработает print("text")напечатает указанный текст на вашем экране в командной строке

Другие вопросы по тегам