Co znamená "SyntaxError: Chybějící závorky ve volání příkazu 'print'" v jazyce Python?

Když se pokusím použít příkaz print v jazyce Python, vyhodí mi to tuto chybu:

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

Co to znamená?

Řešení

Toto chybové hlášení znamená, že se pokoušíte použít Python 3 k následování příkladu nebo spustit program, který používá příkaz print jazyka Python 2:

print "Hello, World!"

Výše uvedený příkaz nefunguje v Pythonu 3. V Pythonu 3 je třeba kolem hodnoty, která se má vypsat, přidat závorky:

print("Hello, World!")

"SyntaxError: Chybějící závorky ve volání příkazu 'print' " je nové chybové hlášení, které bylo přidáno do Pythonu 3.4.2 především proto, aby pomohlo uživatelům, kteří se snaží sledovat výukový program Pythonu 2 při spuštění Pythonu 3.

V Pythonu 3 se tisk hodnot změnil ze samostatného příkazu na běžné volání funkce, takže nyní potřebuje závorky:

>>> print("Hello, World!")
Hello, World!

V dřívějších verzích Pythonu 3 interpret pouze hlásil obecnou syntaktickou chybu, aniž by poskytl jakoukoli užitečnou nápovědu, co by mohlo být špatně:

>>> print "Hello, World!"
  File "", line 1
    print "Hello, World!"
                        ^
SyntaxError: invalid syntax

Pokud jde o to, proč se print stal v Pythonu 3 obyčejnou funkcí, netýkalo se to základního tvaru příkazu, ale spíše toho, jak se dělaly složitější věci, jako je vypisování více položek na stderr s koncovou mezerou místo ukončení řádku.

V Pythonu 2:

>>> import sys
>>> print >> sys.stderr, 1, 2, 3,; print >> sys.stderr, 4, 5, 6
1 2 3 4 5 6

V Pythonu 3:

>>> import sys
>>> print(1, 2, 3, file=sys.stderr, end=" "); print(4, 5, 6, file=sys.stderr)
1 2 3 4 5 6

Počínaje vydáním Pythonu 3.6.3 v září 2017 byla aktualizována některá chybová hlášení související s tiskovou syntaxí Pythonu 2.x tak, aby doporučovala své protějšky pro Python 3.x:

>>> print "Hello!"
  File "", line 1
    print "Hello!"
                 ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?

Protože případ "Chybějící závorky ve volání tisku" je syntaktickou chybou v době kompilace, a tudíž má přístup k surovému zdrojovému kódu, je schopen do navrhované náhrady zahrnout celý text na zbytku řádku. V současné době se však nepokouší vyřešit, jaké uvozovky je třeba kolem tohoto výrazu umístit (není to nemožné, jen dostatečně složité, aby to nebylo provedeno).

Přizpůsobena byla také chyba TypeError vyvolaná pro operátor pravého posunu:

>>> print >> sys.stderr
Traceback (most recent call last):
  File "", line 1, in 
TypeError: unsupported operand type(s) for >>: 'builtin_function_or_method' and '_io.TextIOWrapper'. Did you mean "print(, file=<output_stream>)"?

Protože je tato chyba vyvolána při běhu kódu, a ne při jeho kompilaci, nemá přístup k surovému zdrojovému kódu, a proto používá metaproměnné (`a<output_stream>`) v navrhovaném náhradním výrazu místo toho, co uživatel skutečně napsal. Na rozdíl od případu syntaktické chyby je'jednoduché umístit uvozovky kolem výrazu Pythonu ve vlastní chybové zprávě pravého posunu.

Komentáře (5)

Došlo ke změně syntaxe z Pythonu 2 na Python 3. V Pythonu 2,

print "Hello, World!" 

bude fungovat, ale v Pythonu 3 použijte závorky jako

print("Hello, World!")

To je syntaxe ekvivalentní Scale a blízká Javě.

Komentáře (0)

V jazyce Python 3 můžete tisknout pouze jako:

print("STRING")

V Pythonu 2 však závorky nejsou nutné.

Komentáře (0)