Kiedy próbuję użyć instrukcji print
w Pythonie, daje mi ten błąd:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: Missing parentheses in call to 'print'
Co to oznacza?
Ten komunikat o błędzie oznacza, że próbujesz użyć Pythona 3 do wykonania przykładu lub uruchomienia programu, który używa instrukcji Pythona 2 print
:
print "Hello, World!"
Powyższe stwierdzenie nie działa w Pythonie 3. W Pythonie 3 musisz dodać nawiasy wokół wartości, która ma zostać wydrukowana:
print("Hello, World!")
"SyntaxError: Missing parentheses in call to 'print' " jest nowym komunikatem o błędzie, który został dodany w Pythonie 3.4.2 głównie po to, aby pomóc użytkownikom, którzy próbują podążać za samouczkiem Pythona 2 podczas pracy z Pythonem 3.
W Pythonie 3, drukowanie wartości zmieniło się z odrębnej deklaracji na zwykłe wywołanie funkcji, więc teraz wymaga nawiasów:
>>> print("Hello, World!")
Hello, World!
We wcześniejszych wersjach Pythona 3 interpreter po prostu zgłasza ogólny błąd składni, nie dostarczając żadnych użytecznych wskazówek, co może być nie tak:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: invalid syntax
Jeśli chodzi o to, dlaczego print
stał się zwykłą funkcją w Pythonie 3, nie odnosi się to do podstawowej formy deklaracji, ale raczej do tego, jak robić bardziej skomplikowane rzeczy, takie jak drukowanie wielu elementów na stderr ze spacją zamiast zakończenia linii.
W Pythonie 2:
>>> import sys
>>> print >> sys.stderr, 1, 2, 3,; print >> sys.stderr, 4, 5, 6
1 2 3 4 5 6
W Pythonie 3:
>>> import sys
>>> print(1, 2, 3, file=sys.stderr, end=" "); print(4, 5, 6, file=sys.stderr)
1 2 3 4 5 6
Począwszy od wydania Pythona 3.6.3 we wrześniu 2017 r., niektóre komunikaty o błędach związane ze składnią drukowania Pythona 2.x zostały zaktualizowane, aby zalecać ich odpowiedniki w Pythonie 3.x:
>>> print "Hello!"
File "<stdin>", line 1
print "Hello!"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?
Ponieważ "Missing parentheses in call to print" case jest błędem składni czasu kompilacji, a więc ma dostęp do surowego kodu źródłowego, to'jest w stanie zawrzeć pełny tekst na pozostałej części linii w sugerowanym zamienniku. Jednakże, nie próbuje on obecnie wypracować odpowiednich cudzysłowów, które należy umieścić wokół tego wyrażenia (nie jest to'niemożliwe, tylko wystarczająco skomplikowane, że nie zostało zrobione).
Dostosowano również TypeError
podnoszony dla operatora przesunięcia w prawo:
>>> 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>)"?
Ponieważ ten błąd jest wywoływany podczas działania kodu, a nie podczas jego kompilacji, nie ma on dostępu do surowego kodu źródłowego, a zatem używa metazmiennych (<message>
i <output_stream>
) w sugerowanym wyrażeniu zastępczym zamiast tego, co użytkownik faktycznie wpisał. W odróżnieniu od przypadku błędu składni, umieszczenie cudzysłowów wokół wyrażenia Pythona w niestandardowym komunikacie błędu prawego przesunięcia jest proste.
Nastąpiła zmiana w składni z Pythona 2 na Pythona 3. W Pythonie 2,
print "Hello, World!"
będzie działać, ale w Pythonie 3 należy użyć nawiasów jako
print("Hello, World!")
Jest to równoważna składnia do Scali i blisko do Javy.