Que signifie" SyntaxError: les parenthèses manquantes dans call to 'print' " en Python?

quand j'essaie d'utiliser une instruction print en Python, cela me donne cette erreur:

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

ça veut dire Quoi?

332
demandé sur Peter Mortensen 2014-08-22 14:58:51

6 réponses

ce message d'erreur signifie que vous essayez D'utiliser Python 3 pour suivre un exemple ou exécuter un programme qui utilise la déclaration Python 2 print :

print "Hello, World!"

l'énoncé ci-dessus ne fonctionne pas en Python 3. En Python 3, vous devez ajouter des parenthèses autour de la valeur à imprimer:

print("Hello, World!")

" SyntaxError: Missing parentheses in call to 'print' " est un nouveau message d'erreur qui a été ajouté en python 3.4.2 principalement pour aider les utilisateurs qui essaient de suivre un tutoriel Python 2 tout en exécutant Python 3.

en Python 3, les valeurs d'impression ont changé, passant d'une déclaration distincte à un appel de fonction ordinaire, de sorte qu'il faut maintenant des parenthèses:

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

dans les versions précédentes de Python 3, l'interpréteur ne fait que rapporter un générique erreur de syntaxe, sans fournir d'utiles indications sur ce qui pourrait mal se passer:

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

comme pour pourquoi print est devenu une fonction ordinaire en Python 3, qui ne se rapporte pas à la forme de base de la déclaration, mais plutôt à la façon dont vous avez fait des choses plus compliquées comme l'impression de plusieurs articles à stderr avec un espace arrière plutôt que de finir la ligne.

En Python 2:

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

En 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 sortie de python 3.6.3 en septembre 2017, quelques messages d'erreur liés au Python 2.la syntaxe d'impression x a été mise à jour pour recommander leur Python 3.x homologues:

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

puisque le cas "parenthèses manquantes dans l'appel à imprimer" est une erreur de syntaxe de compilation et a donc accès au code source brut, il est capable d'inclure le texte complet 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, juste assez compliqué que cela n'a pas été fait).

le TypeError relevé pour l'opérateur de poste de droite a également été personnalisé:

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

Depuis cette erreur est générée lorsque le code s'exécute, plutôt que lorsqu'il est compilé, il n'a pas accès à la source brut code, et utilise donc des méta-variables ( <message> et <output_stream> ) dans l'expression de remplacement suggérée au lieu de ce que l'Utilisateur a tapé. Contrairement au cas d'erreur syntaxique, il est simple de placer des guillemets autour de L'expression Python dans le message d'erreur personnalisé de MAJ à droite.

533
répondu ncoghlan 2018-06-05 16:31:12

malheureusement, l'ancienne xkcd comic n'est plus tout à fait à jour.

/images/content/25445439/bcc0b85f5cedb72a4c15ae8efbe17f63.png

depuis Python 3.0 vous devez écrire:

print("Hello, World!")

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

13
répondu Christian 2018-06-05 16:38:11

il y a un changement de syntaxe de Python 2 à Python 3. En Python 2,

 print "Hello, World!" will work but

en Python 3, Utilisez des bretelles comme

print("Hello, World!")

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

9
répondu Sagar balai 2018-06-05 16:37:02

en Python 3, vous pouvez seulement imprimer comme:

print("STRING")

mais en Python 2, les parenthèses ne sont pas nécessaires.

3
répondu Larry 2018-06-05 16:35:58

si votre code doit fonctionner en Python 2 et 3, vous pouvez y parvenir en chargeant ceci au début de votre programme:

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

alors vous pouvez imprimer en 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=', ')
2
répondu Lukasz 2018-06-05 16:22:27

en dehors des réponses directes ici, on devrait noter l'autre différence clé entre python 2 et 3. Le wiki officiel de python entre dans presque toutes les différences majeures et se concentre sur le moment où vous devez utiliser l'une ou l'autre des versions. ce billet de blog explique aussi très bien l'univers actuel de python et le puzzle en quelque sorte non résolu de passer à python 3.

autant que je sache, vous commencez apprendre le langage python. Vous devriez considérer les articles mentionnés ci-dessus avant de continuer sur la route python 3. Non seulement vous devez changer certaines de vos syntaxe, vous aurez également besoin de penser à les packages qui seront disponibles pour vous (un avantage de python 2) et d'éventuelles optimisations qui pourraient être faites dans votre code (un avantage de python 3).

1
répondu Chad Van De Hey 2018-06-05 16:39:36