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 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:
print("Hello, World!")
Et quelqu'un doit encore écrire cette antigravity
bibliothèque :(
Il y a un changement de syntaxe de Python 2 à Python 3. En Python 2,
print "Hello, World!"
fonctionnera mais en Python 3, utilisez des parenthèses comme
print("Hello, World!")
C'est une syntaxe équivalente à Scala et proche de Java.
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:
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 souhaitez imprimer quelque chose sans créer de nouvelle ligne, vous pouvez le faire:
for number in range(0, 10):
print(number, end=', ')
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")
print
était une déclaration dans 2.x , mais il est une fonction dans 3.x . Maintenant, il y a plusieurs bonnes raisons à cela.
>>> items = ['foo', 'bar', 'baz'] >>> print(*items, sep='+') foo+bar+baz
Je pourrais également ajouter que je savais tout sur le changement de syntaxe entre Python2.7
et Python3
, et mon code a été correctement écrit comme print("string")
et même
print(f"string")
...
Mais après un certain temps de débogage, j'ai réalisé que mon script bash appelait python comme:
python nom_fichier.py
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:
python3 nom_fichier.py
lequel de gros utilise python3 pour exécuter le script qui a corrigé l'erreur.
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) .