Ce message d'erreur signifie que vous essayez d'utiliser Python 3 pour suivre un exemple ou exécuter un programme qui utilise l' print
instruction Python 2 :
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: Parenthèses manquantes dans l'appel à« imprimer »» est un nouveau message d'erreur qui a été ajouté dans Python 3.4.2 principalement pour aider les utilisateurs qui tentent de suivre un didacticiel Python 2 lors de l'exécution de Python 3.
Dans Python 3, les valeurs d'impression sont passées d'une instruction distincte à un appel de fonction ordinaire, il a donc besoin de parenthèses:
>>> print("Hello, World!")
Hello, World!
Dans les versions antérieures de Python 3, l'interpréteur signale simplement une erreur de syntaxe générique, sans fournir de conseils utiles sur ce qui pourrait mal se passer:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: invalid syntax
Quant à savoir pourquoi print
est devenu une fonction ordinaire dans Python 3, cela ne concernait pas la forme de base de l'instruction, mais plutôt la façon dont vous avez fait des choses plus compliquées comme l'impression de plusieurs éléments sur stderr avec un espace de fin plutôt que de terminer 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
Depuis 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 leurs homologues Python 3.x:
>>> print "Hello!"
File "<stdin>", line 1
print "Hello!"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?
Étant donné que 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 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, juste suffisamment compliqué pour que cela ne soit pas fait).
Le TypeError
surélevé pour l'opérateur de changement 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>)"?
Étant donné que cette erreur est générée lors de l'exécution du code, plutôt que lors de sa compilation, elle n'a pas accès au code source brut et utilise donc des méta-variables ( <message>
et <output_stream>
) dans l'expression de remplacement suggérée au lieu de tout ce que l'utilisateur a 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é.
Malheureusement, l'ancienne bande dessinée xkcd n'est plus complètement à jour.
Depuis Python 3.0, vous devez écrire:
Et quelqu'un doit encore écrire cette
antigravity
bibliothèque :(la source
Il y a un changement de syntaxe de Python 2 à Python 3. En Python 2,
fonctionnera mais en Python 3, utilisez des parenthèses comme
C'est une syntaxe équivalente à Scala et proche de Java.
la source
Si votre code doit fonctionner à la fois en Python 2 et 3, vous pouvez y parvenir en chargeant ceci au début de votre programme:
Ensuite, vous pouvez imprimer de la manière Python 3:
Si vous souhaitez imprimer quelque chose sans créer de nouvelle ligne, vous pouvez le faire:
la source
Dans Python 3, vous pouvez uniquement imprimer en tant que:
Mais en Python 2, les parenthèses ne sont pas nécessaires.
la source
Fondamentalement, depuis Python 3.x, vous devez utiliser
print
des parenthèses.Python 2.x : imprimer "Le Seigneur des anneaux"
Python 3.x : print ("Le Seigneur des anneaux")
Explication
print
était une déclaration dans 2.x , mais il est une fonction dans 3.x . Maintenant, il y a plusieurs bonnes raisons à cela.la source
Je pourrais également ajouter que je savais tout sur le changement de syntaxe entre
Python2.7
etPython3
, et mon code a été correctement écrit commeprint("string")
et mêmeprint(f"string")
...Mais après un certain temps de débogage, j'ai réalisé que mon script bash appelait python comme:
ce qui a eu pour effet d'appeler mon script python par défaut en utilisant
python2.7
ce qui a donné l'erreur. J'ai donc changé mon script bash en:lequel de gros utilise python3 pour exécuter le script qui a corrigé l'erreur.
la source
En dehors des réponses directes ici, il convient de noter l'autre différence clé entre python 2 et 3. Le wiki officiel de python va dans presque toutes les différences majeures et se concentre sur quand vous devez utiliser l'une ou l'autre des versions. Cet article de blog explique également très bien l'univers actuel de Python et le casse-tête non résolu de 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. Non seulement vous devrez changer une partie de votre syntaxe, mais vous devrez également penser aux packages qui seront disponibles pour vous (un avantage de python 2) et aux optimisations potentielles qui pourraient être faites dans votre code (un avantage de python 3) .
la source