web-dev-qa-db-fra.com

Que signifie "SyntaxError: Les parenthèses manquantes dans l'appel à" print "" signifient en Python?

Lorsque j'essaie d'utiliser une instruction print en Python, cela me donne l'erreur suivante:

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

Qu'est-ce que ça veut dire?

365
ncoghlan

Ce message d'erreur signifie que vous essayez d'utiliser Python 3 pour suivre un exemple ou exécuter un programme qui utilise l'instruction Python 2 print:

print "Hello, World!"

L'instruction ci-dessus ne fonctionne pas dans Python 3. Dans Python 3, vous devez ajouter des parenthèses autour de la valeur à imprimer:

print("Hello, World!")

“SyntaxError: Les parenthèses manquantes dans l'appel à 'print'” est un nouveau message d'erreur ajouté dans Python 3.4.2 principalement pour aider les utilisateurs qui essaient de suivre un Python 2 tutoriel lors de l'exécution de Python 3.

Dans Python 3, les valeurs imprimées sont passées d'une instruction distincte à un appel de fonction ordinaire. Il faut donc maintenant utiliser des parenthèses:

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

Dans les versions antérieures de Python 3, l'interpréteur ne signalait qu'une erreur de syntaxe générique, sans fournir d'indications utiles sur les problèmes éventuels:

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

Quant à pourquoiprint est devenu une fonction ordinaire dans Python 3, qui ne se rapportait pas à la forme de base de la déclaration, mais plutôt à la façon dont vous avez fait plus compliqué des choses comme imprimer plusieurs articles sur stderr avec un espace de fin plutôt que de terminer la ligne.

Dans Python 2:

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

Dans 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

À partir de la version Python 3.6.3 de septembre 2017, certains messages d'erreur liés à la syntaxe d'impression Python 2.x ont été mis à jour pour recommander leur Python 3. homologues .x:

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

Etant donné que la casse "Manquant entre parenthèses dans l'appel à imprimer" est une erreur de syntaxe de compilation et a donc accès au code source brut, elle permet d'inclure le texte intégral sur le reste de la ligne dans le remplacement suggéré. Cependant, il n'essaie pas actuellement de trouver les citations appropriées à placer autour de cette expression (ce n'est pas impossible, mais suffisamment compliqué pour que cela ne soit pas fait).

La TypeError élevée pour l'opérateur de décalage de droite a également été personnalisée:

>>> 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>)"?

Étant donné que cette erreur est générée lors de l’exécution du code, et non lors de sa compilation, il n’a pas accès au code source brut et utilise donc des méta-variables (<message> et <output_stream>) dans le répertoire. suggéré expression de remplacement au lieu de ce que l'utilisateur a réellement tapé. Contrairement au cas d'erreur de syntaxe, il est simple de placer des guillemets autour de l'expression Python dans le message d'erreur de décalage à droite personnalisé.

570
ncoghlan

Malheureusement, le vieux xkcd comic n'est plus complètement à jour.

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

Depuis Python 3.0, vous devez écrire:

print("Hello, World!")

Et quelqu'un doit encore écrire cette bibliothèque antigravity :(

21
Christian

La syntaxe change de Python 2 à Python 3. Dans Python 2,

print "Hello, World!" 

fonctionnera mais dans Python 3, utilisez les parenthèses comme

print("Hello, World!")

C'est la syntaxe équivalente à Scala et proche de Java.

17
Sagar balai

Si votre code doit fonctionner à la fois dans Python 2 et 3, vous pouvez y parvenir en chargeant cela au début de votre programme:

from __future__ import print_function   # If code has to work in Python 2 and 3!

Ensuite, vous pouvez imprimer de la manière Python 3:

print("python")

Si vous voulez imprimer quelque chose sans créer une nouvelle ligne, vous pouvez le faire:

for number in range(0, 10):
    print(number, end=', ')
4
Lukasz

Dans Python 3, vous ne pouvez imprimer que:

print("STRING")

Mais dans Python 2, les parenthèses ne sont pas nécessaires.

3
Larry

En dehors des réponses directes, il convient de noter l’autre différence essentielle entre python 2 et 3. Le officiel python wiki traite de presque tous les aspects majeurs. différences et se concentre sur le moment où vous devez utiliser l’une ou l’autre des versions. Cet article de blog explique très bien l'univers actuel python et le casse-tête plus ou moins complexe consistant à passer à python 3.

Autant que je sache, vous commencez à apprendre le langage python. Vous devriez considérer les articles susmentionnés avant de continuer sur la route python 3. Vous devrez non seulement modifier une partie de votre syntaxe, vous devrez également déterminer quels packages seront disponibles (un avantage de python 2) et les optimisations potentielles qui pourraient être apportées à votre code ( un avantage de python 3).

1
Chad Van De Hey