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