Raisons courantes pour SyntaxError – Real Python

By | novembre 20, 2019

Cours Python en ligne

Python est connu pour sa syntaxe simple. Cependant, lorsque vous apprenez Python pour la première fois ou que vous venez à Python avec un fond solide dans un autre langage de programmation, vous risquez de rencontrer des problèmes que Python n’autorise pas. Si vous avez déjà reçu un Erreur de syntaxe lorsque vous essayez d’exécuter votre code Python, alors ce guide peut vous aider. Tout au long de ce didacticiel, vous verrez des exemples courants de syntaxe non valide en Python et apprendrez à résoudre le problème.

À la fin de ce didacticiel, vous pourrez:

  • Identifier Syntaxe invalide en python
  • Déchiffrer Erreur de syntaxe retraits
  • Résoudre syntaxe invalide ou l'empêcher complètement

Syntaxe invalide en Python

Lorsque vous exécutez votre code Python, l’interprète l’analysera d’abord pour le convertir en code octet Python, qu’il exécutera ensuite. L’interprète trouvera toute syntaxe non valide dans Python au cours de cette première étape de l’exécution du programme, également connue sous le nom de phase d'analyse. Si l’interprète ne peut pas analyser votre code Python avec succès, cela signifie que vous avez utilisé une syntaxe non valide quelque part dans votre code. L'interprète essaiera de vous montrer où cette erreur s'est produite.

Lorsque vous apprenez Python pour la première fois, il peut être frustrant d’obtenir une Erreur de syntaxe. Python tentera de vous aider à déterminer où se trouve la syntaxe non valide dans votre code, mais le suivi qu'il fournit peut être un peu déroutant. Parfois, le code indiqué est parfaitement correct.

Vous ne pouvez pas gérer une syntaxe non valide en Python comme d’autres exceptions. Même si vous avez essayé d’envelopper un essayer et sauf bloquer autour du code avec une syntaxe non valide, vous voyez toujours l'interpréteur déclencher une Erreur de syntaxe.

Erreur de syntaxe Exception et Traceback

Lorsque l’interprète rencontre une syntaxe non valide dans le code Python, il déclenche une Erreur de syntaxe exception et fournir une trace avec quelques informations utiles pour vous aider à déboguer l’erreur. Voici du code contenant une syntaxe non valide en Python:

    1 # theofficefacts.py
    2 âge = 
    3     'pam': 24,
    4     'jim': 24
    5     'Michael': 43
    6 
    7 impression(F'Michael est âge["michael"]    ans.')

Vous pouvez voir la syntaxe non valide dans le littéral du dictionnaire à la ligne 4. La deuxième entrée, 'jim', manque une virgule. Si vous essayez d’exécuter ce code tel quel, vous obtiendrez le suivi suivant:

$ python theofficefacts.py
Fichier "theofficefacts.py", ligne 5
                'michael': 43
                                                ^
ErreurDeSyntaxe: Syntaxe invalide

Notez que le message de suivi identifie l'erreur à la ligne 5, et non à la ligne 4. L'interpréteur Python tente d'indiquer où se trouve la syntaxe non valide. Cependant, cela ne peut que montrer vraiment où il a remarqué un problème. Quand vous obtenez un Erreur de syntaxe traceback et le code pointé par cette trace semblent corrects, vous voudrez alors commencer à revenir en arrière dans le code jusqu'à ce que vous puissiez déterminer ce qui ne va pas.

Dans l'exemple ci-dessus, il n'y a pas de problème à laisser une virgule, cela dépend de ce qui vient après. Par exemple, il n’ya pas de problème de disparition après 'Michael' ligne 5. Mais une fois que l’interprète a rencontré quelque chose qui n’a pas de sens, il ne peut que vous indiquer la première chose qu’il a trouvée qu’il ne pouvait pas comprendre.

Il y a quelques éléments d'un Erreur de syntaxe traceback qui peut vous aider à déterminer où se trouve la syntaxe non valide dans votre code:

  • Le nom du fichier où la syntaxe invalide a été rencontrée
  • Le numéro de ligne et ligne reproduite du code où le problème a été rencontré
  • Un caret (^) sur la ligne en dessous du code reproduit, qui indique le point du code qui pose un problème
  • Le message d'erreur qui vient après le type d'exception Erreur de syntaxe, qui peut fournir des informations pour vous aider à déterminer le problème

Dans l'exemple ci-dessus, le nom de fichier donné était theofficefacts.py, le numéro de ligne était 5 et le curseur indiquait la citation finale de la clé de dictionnaire Michael. le Erreur de syntaxe traceback peut ne pas indiquer le vrai problème, mais il indiquera le premier endroit où l’interprète ne pourrait pas donner de sens à la syntaxe.

Il y a deux autres exceptions que vous pourriez voir augmenter avec Python. Celles-ci sont équivalentes à Erreur de syntaxe mais ont des noms différents:

  1. IndentationError
  2. TabError

Ces exceptions héritent toutes deux de la Erreur de syntaxe classe, mais il s’agit de cas particuliers d’indentation. Un IndentationError est levé lorsque les niveaux d’indentation de votre code ne correspondent pas. UNE TabError est déclenché lorsque votre code utilise des tabulations et des espaces dans le même fichier. Vous examinerez de plus près ces exceptions dans une section ultérieure.

Problèmes de syntaxe courants

Lorsque vous rencontrez un Erreur de syntaxe Pour la première fois, il est utile de savoir pourquoi il y a un problème et comment vous pouvez corriger la syntaxe non valide dans votre code Python. Dans les sections ci-dessous, vous verrez certaines des raisons les plus courantes qu’une Erreur de syntaxe pourrait être soulevé et comment vous pouvez les résoudre.

Mauvaise utilisation de l'opérateur d'assignation (=)

Il existe plusieurs cas dans Python dans lesquels vous ne pouvez pas assigner d'objets. Certains exemples attribuent des littéraux et des appels de fonction. Dans le bloc de code ci-dessous, vous pouvez voir quelques exemples qui tentent de le faire et les résultats obtenus. Erreur de syntaxe les retraits:

>>>

>>> len('Bonjour') = 5
  Fichier "", ligne 1
Erreur de syntaxe: ne peut pas assigner à l'appel de fonction

>>> 'foo' = 1
  Fichier "", ligne 1
Erreur de syntaxe: ne peut pas attribuer à littéral

>>> 1 = 'foo'
  Fichier "", ligne 1
Erreur de syntaxe: ne peut pas attribuer à littéral

Le premier exemple tente d'affecter la valeur 5 à la len () appel. le Erreur de syntaxe le message est très utile dans ce cas. Il vous indique que vous ne pouvez pas affecter de valeur à un appel de fonction.

Les deuxième et troisième exemples tentent d'attribuer une chaîne et un entier à des littéraux. La même règle est vraie pour les autres valeurs littérales. Une fois encore, les messages de suivi indiquent que le problème se produit lorsque vous essayez d'affecter une valeur à un littéral.

Il est probable que votre intention n’est pas d’attribuer une valeur à un appel littéral ou à une fonction. Par exemple, cela peut se produire si vous oubliez accidentellement le signe extra égal (=), ce qui transformerait la mission en comparaison. Comme vous pouvez le voir ci-dessous, une comparaison serait valide:

>>>

>>> len('Bonjour') == 5
Vrai

La plupart du temps, lorsque Python vous indique que vous effectuez une affectation à quelque chose qui ne peut pas l'être, vous voudrez peut-être tout d'abord vérifier que l'instruction ne doit pas être une expression booléenne. Vous pouvez également rencontrer ce problème lorsque vous essayez d'attribuer une valeur à un mot clé Python, ce que vous allez voir dans la section suivante.

Corriger les mots clés en Python, en manquer ou en abuser

Les mots-clés Python sont un ensemble de mots protégés qui ont une signification particulière en Python. Ce sont des mots que vous ne pouvez pas utiliser comme identificateurs, variables ou noms de fonctions dans votre code. Ils font partie du langage et ne peuvent être utilisés que dans le contexte autorisé par Python.

Vous pouvez utiliser des mots clés par erreur de trois manières courantes:

  1. Mal orthographié un mot clé
  2. Manquant un mot clé
  3. Mal utiliser un mot clé

Si vous mal orthographier un mot-clé dans votre code Python, vous obtiendrez un Erreur de syntaxe. Par exemple, voici ce qui se passe si vous épelez le mot clé pour incorrectement:

>>>

>>> bof je dans intervalle(dix):
  Fichier "", ligne 1
    bof je dans intervalle(dix):
        ^
Erreur de syntaxe: Syntaxe invalide

Le message lit ErreurDeSyntaxe: Syntaxe invalide, mais ce n’est pas très utile. Le traçage pointe vers le premier endroit où Python a pu détecter que quelque chose n'allait pas. Pour corriger ce type d'erreur, assurez-vous que tous vos mots-clés Python sont correctement orthographiés.

Un autre problème commun avec les mots-clés est lorsque vous Mademoiselle eux tout à fait:

>>>

>>> pour je intervalle(dix):
  Fichier "", ligne 1
    pour je intervalle(dix):
              ^
Erreur de syntaxe: Syntaxe invalide

Encore une fois, le message d’exception n’est pas très utile, mais le suivi (retracé) tente de vous orienter dans la bonne direction. Si vous revenez du curseur, vous pouvez voir que le dans le mot clé est absent du pour syntaxe de boucle.

Vous pouvez aussi abuser un mot-clé Python protégé. N'oubliez pas que les mots clés ne peuvent être utilisés que dans des situations spécifiques. Si vous ne les utilisez pas correctement, la syntaxe de votre code Python sera invalide. Un exemple courant est l’utilisation de continuer ou Pause en dehors d'une boucle. Cela peut facilement arriver pendant le développement lorsque vous implémentez des choses et que vous arrivez à déplacer la logique en dehors d'une boucle:

>>>

>>> noms = [[[['pam', 'jim', 'Michael']
>>> si 'jim' dans noms:
...     impression('jim trouvé')
...     Pause
...
  Fichier "", ligne 3
Erreur de syntaxe: «pause» boucle extérieure

>>> si 'jim' dans noms:
...     impression('jim trouvé')
...     continuer
...
  Fichier "", ligne 3
Erreur de syntaxe: 'continue' pas correctement en boucle

Ici, Python fait un excellent travail pour vous dire exactement ce qui ne va pas. Les messages "'pause' en dehors de la boucle" et "'continue' pas correctement en boucle" vous aider à comprendre exactement quoi faire. Si ce code était dans un fichier, alors Python aurait également le curseur pointant directement sur le mot-clé mal utilisé.

Un autre exemple est si vous essayez d'attribuer un mot clé Python à une variable ou utilisez un mot clé pour définir une fonction:

>>>

>>> passer = Vrai
        Fichier "", ligne 1
    passer = Vrai
         ^
Erreur de syntaxe: Syntaxe invalide

>>> def passer():
  Fichier "", ligne 1
    def passer():
           ^
Erreur de syntaxe: Syntaxe invalide

Lorsque vous essayez d’attribuer une valeur à passer, ou lorsque vous essayez de définir une nouvelle fonction appelée passer, vous aurez un Erreur de syntaxe et voir le "Syntaxe invalide" message à nouveau.

Il pourrait être un peu plus difficile de résoudre ce type de syntaxe non valide dans le code Python car le code semble correct de l'extérieur. Si votre code semble bon, mais que vous obtenez toujours un Erreur de syntaxe, vous pouvez alors envisager de comparer le nom de variable ou le nom de fonction que vous souhaitez utiliser à la liste de mots clés de la version de Python que vous utilisez.

La liste des mots clés protégés a changé à chaque nouvelle version de Python. Par exemple, dans Python 3.6, vous pouvez utiliser attendre en tant que nom de variable ou nom de fonction, mais à partir de Python 3.7, ce mot a été ajouté à la liste des mots clés. Maintenant, si vous essayez d'utiliser attendre comme un nom de variable ou de fonction, cela entraînera une Erreur de syntaxe si votre code est pour Python 3.7 ou version ultérieure.

Un autre exemple de ceci est impression, qui diffère dans Python 2 vs Python 3:

Version impression Type Prend une valeur
Python 2 mot-clé non
Python 3 fonction intégrée Oui

impression est un mot-clé dans Python 2, vous ne pouvez donc pas lui attribuer de valeur. En Python 3, cependant, il s’agit d’une fonction intégrée à laquelle on peut attribuer des valeurs.

Vous pouvez exécuter le code suivant pour afficher la liste des mots-clés dans la version de Python que vous utilisez:

importation mot-clé
impression(mot-clé.kwlist)

mot-clé fournit également l'utile keyword.iskeyword (). Si vous avez juste besoin d’un moyen rapide de vérifier la passer variable, vous pouvez utiliser la ligne suivante:

>>>

>>> importation mot-clé; mot-clé.iskeyword('passer')
Vrai

Ce code vous dira rapidement si l'identifiant que vous essayez d'utiliser est un mot clé ou non.

Parenthèses, crochets et citations manquants

La cause de la syntaxe non valide dans le code Python est souvent une parenthèse de fermeture, un crochet ou une citation manquants ou incohérents. Celles-ci peuvent être difficiles à repérer dans de très longues lignes de parenthèses imbriquées ou dans des blocs de plusieurs lignes plus longs. Vous pouvez repérer des citations incompatibles ou manquantes à l’aide des traces de Python:

>>>

>>> message = 'Don't'
  Fichier "", ligne 1
    message = 'Don't'
                   ^
Erreur de syntaxe: Syntaxe invalide

Ici, la trace pointe vers le code invalide où il y a un t ' après une citation unique de clôture. Pour résoudre ce problème, vous pouvez apporter l'une des deux modifications suivantes:

  1. Échapper la citation unique avec une barre oblique inverse ('ne pas')
  2. Entourer la chaîne entière entre guillemets à la place ("ne pas")

Une autre erreur courante consiste à oublier de fermer une chaîne. Avec des chaînes à guillemets doubles et à guillemets simples, la situation et le retraçage sont les mêmes:

>>>

>>> message = "Ceci est une chaîne non fermée
  Fichier "", ligne 1
    message = "Ceci est une chaîne non fermée
                                        ^
Erreur de syntaxe: EOL lors de l'analyse littérale

Cette fois, le curseur inséré dans le suivi pointe directement sur le code du problème. le Erreur de syntaxe message, "EOL lors de l'analyse littérale de chaîne", est un peu plus spécifique et utile pour déterminer le problème. Cela signifie que l'interpréteur Python est arrivé à la fin d'une ligne (EOL) avant qu'une chaîne ouverte ne soit fermée. Pour résoudre ce problème, fermez la chaîne avec un guillemet qui correspond à celui que vous avez utilisé pour le démarrer. Dans ce cas, ce serait une double citation (").

Les citations manquantes dans les instructions contenues dans une chaîne f peuvent également entraîner une syntaxe non valide en Python:

    1 # theofficefacts.py
    2 âge = 
    3     'pam': 24,
    4     'jim': 24,
    5     'Michael': 43
    6 
    7 impression(F'Michael est âge["michael]    ans.')

Ici, la référence à la âge le dictionnaire à l'intérieur de la chaîne f imprimée manque la citation double de fermeture de la référence clé. Le traceback résultant est le suivant:

$ python theofficefacts.py
  Fichier "theofficefacts.py", ligne 7
                print (f'Michael is ages["michael] ans.')
                                    ^
SyntaxError: f-string: chaîne non terminée

Python identifie le problème et vous dit qu'il existe dans la chaîne f. Le message "chaîne non terminée" indique également quel est le problème. Dans ce cas, le curseur indique uniquement le début de la chaîne de caractères.

Cela pourrait ne pas être aussi utile que lorsque le curseur pointe sur la zone de problème de la chaîne de caractères, mais cela permet de réduire les points où vous devez regarder. Il y a une chaîne non terminée quelque part dans cette chaîne. Vous devez juste savoir où. Pour résoudre ce problème, assurez-vous que tous les guillemets et crochets de chaîne f internes sont présents.

La situation est essentiellement la même pour les parenthèses et les crochets manquants. Si vous omettez, par exemple, le crochet de fermeture d'une liste, Python le remarquera et le signalera. Il existe cependant quelques variantes. La première consiste à laisser le crochet de fermeture de la liste:

# missing.py
def foo():
    revenir [[[[1, 2, 3

impression(foo())

Lorsque vous exécuterez ce code, on vous dira qu’il ya un problème avec l’appel à impression():

$ python manquant
  Fichier "missing.py", ligne 5
                imprimer (foo ())
                                ^
ErreurDeSyntaxe: Syntaxe invalide

Python pense que la liste contient trois éléments: 1, 2, et 3 empreintes (foo ()). Python utilise des espaces pour regrouper les éléments de manière logique, et parce qu’il n’ya pas de virgule ni de crochet entre 3 de imprimer (foo ()), Python les regroupe en tant que troisième élément de la liste.

Une autre variante consiste à ajouter une virgule à la fin du dernier élément de la liste tout en laissant de côté le crochet de fermeture:

# missing.py
def foo():
    revenir [[[[1, 2, 3,

impression(foo())

Maintenant, vous obtenez une trace différente:

$ python manquant
  Fichier "missing.py", ligne 6

                                                                ^
SyntaxError: EOF inattendu lors de l'analyse

Dans l'exemple précédent, 3 et imprimer (foo ()) ont été regroupés en un seul élément, mais ici vous voyez une virgule séparant les deux. Maintenant, l'appel à imprimer (foo ()) est ajouté en tant que quatrième élément de la liste et Python atteint la fin du fichier sans le crochet de fermeture. La trace vous indique que Python est arrivé à la fin du fichier (EOF), mais il attendait autre chose.

Dans cet exemple, Python attendait un crochet de fermeture (]), mais la ligne répétée et le curseur ne sont pas très utiles. Les parenthèses et les crochets manquants sont difficiles à identifier pour Python. Parfois, la seule chose à faire est de partir du curseur et de revenir en arrière jusqu'à ce que vous puissiez identifier ce qui manque ou ce qui ne va pas.

Syntaxe du dictionnaire des erreurs

Vous avez vu plus tôt que vous pourriez obtenir un Erreur de syntaxe si vous laissez la virgule d'un élément du dictionnaire. Une autre forme de syntaxe non valide avec les dictionnaires Python est l’utilisation du signe égal (=) pour séparer les clés et les valeurs, au lieu des deux-points:

>>>

>>> âge = 'pam'=24
  Fichier "", ligne 1
    âge = 'pam'=24
                 ^
Erreur de syntaxe: Syntaxe invalide

Encore une fois, ce message d'erreur n'est pas très utile. La ligne répétée et le curseur sont cependant très utiles! Ils pointent droit sur le caractère problématique.

Ce type de problème est courant si vous confondez la syntaxe Python avec celle d'autres langages de programmation. Vous verrez également cela si vous confondez le fait de définir un dictionnaire avec un dict () appel. Pour résoudre ce problème, vous pouvez remplacer le signe égal par deux points. Vous pouvez également passer à utiliser dict ():

>>>

>>> âge = dict(pam=24)
>>> âge
'pam': 24

Vous pouvez utiliser dict () définir le dictionnaire si cette syntaxe est plus utile.

Utilisation de l'indentation incorrecte

Il y a deux sous-classes de Erreur de syntaxe qui traitent spécifiquement des problèmes d'indentation:

  1. IndentationError
  2. TabError

Alors que d'autres langages de programmation utilisent des accolades pour indiquer des blocs de code, Python utilise des espaces. Cela signifie que Python s'attend à ce que les espaces de votre code se comportent de manière prévisible. Il va élever un IndentationError s'il y a une ligne dans un bloc de code qui a le mauvais nombre d'espaces:

    1 # indentation.py
    2 def foo():
    3     pour je dans intervalle(dix):
    4         impression(je)
    5   impression('terminé')
    6 
    7 foo()

Cela peut être difficile à voir, mais la ligne 5 n’est en retrait que de 2 espaces. Il devrait être conforme à la pour déclaration de boucle, qui est 4 espaces sur. Heureusement, Python peut facilement détecter cela et vous expliquera rapidement quel est le problème.

Il y a aussi un peu d'ambiguïté ici. Est le print ('done') ligne destinée à être après le pour boucle ou à l'intérieur le pour bloc de boucle? Lorsque vous exécutez le code ci-dessus, le message d'erreur suivant s'affiche:

$ indentation python.py
  Fichier "indentation.py", ligne 5
                print ('done')
                                                                ^
IndentationError: unindent ne correspond à aucun niveau d'indentation externe

Même si le retraçage ressemble beaucoup au Erreur de syntaxe traceback, c’est en fait un IndentationError. Le message d'erreur est également très utile. Il vous indique que le niveau d’indentation de la ligne ne correspond à aucun autre niveau d’indentation. En d'autres termes, print ('done') 2 espaces en retrait, mais Python ne trouve aucune autre ligne de code correspondant à ce niveau d’indentation. Vous pouvez résoudre ce problème rapidement en vous assurant que le code est aligné avec le niveau d'indentation attendu.

L'autre type de Erreur de syntaxe est le TabError, que vous verrez chaque fois qu’une ligne contient des tabulations ou des espaces pour son retrait, alors que le reste du fichier contient l’autre. Cela pourrait rester caché jusqu'à ce que Python vous le signale!

Si la taille de votre onglet a la même largeur que le nombre d'espaces de chaque niveau d'indentation, il se peut que toutes les lignes se trouvent au même niveau. Cependant, si une ligne est mise en retrait à l'aide d'espaces et que l'autre est mise en retrait avec des tabulations, alors Python le signalera comme un problème:

    1 # indentation.py
    2 def foo():
    3     pour je dans intervalle(dix):
    4         impression(je)
    5     impression('terminé')
    6 
    7 foo()

Ici, la ligne 5 est en retrait avec une tabulation au lieu de 4 espaces. Ce bloc de code peut vous sembler parfaitement correct ou totalement erroné, en fonction des paramètres de votre système.

Python, cependant, remarquera le problème immédiatement. Mais avant d'exécuter le code pour voir ce que Python vous dira faux, il peut être utile de voir un exemple de ce à quoi le code ressemble sous différents paramètres de largeur d'onglet:

$ onglets 4 # Définit la largeur de l'onglet shell à 4 espaces
$ cat -n indentation.py
     1 # indentation.py
                    2 def foo ():
                    3 pour i dans la gamme (10)
                    4 empreintes (i)
                    5 impression ('fait')
                    6   
                    7 foo ()

$ onglets 8 # Définit la largeur de l'onglet shell à 8 espaces (standard)
$ cat -n indentation.py
     1 # indentation.py
                    2 def foo ():
                    3 pour i dans la gamme (10)
                    4 empreintes (i)
                    5 impression ('fait')
                    6   
                    7 foo ()

$ onglets 3 # Définit la largeur de l'onglet shell à 3 espaces
$ cat -n indentation.py
     1 # indentation.py
                    2 def foo ():
                    3 pour i dans la gamme (10)
                    4 empreintes (i)
                    5 impression ('fait')
                    6   
                    7 foo ()

Notez la différence d'affichage entre les trois exemples ci-dessus. La plupart du code utilise 4 espaces pour chaque niveau d'indentation, mais la ligne 5 utilise un seul onglet dans les trois exemples. La largeur de l'onglet change en fonction de la largeur de la languette réglage:

  • Si la largeur de la languette est 4, puis le impression déclaration ressemblera à l’extérieur du pour boucle. La console imprimera 'terminé' à la fin de la boucle.
  • Si la largeur de la languette est 8, qui est la norme pour beaucoup de systèmes, le impression déclaration ressemblera à l’intérieur du pour boucle. La console imprimera 'terminé' après chaque numéro.
  • Si la largeur de la languette est 3, puis le impression déclaration semble hors de propos. Dans ce cas, la ligne 5 ne correspond à aucun niveau d’indentation.

Lorsque vous exécutez le code, vous obtiendrez l'erreur et le suivi suivants:

$ indentation python.py
  Fichier "indentation.py", ligne 5
                print ('done')
                                                                ^
TabError: utilisation incohérente des tabulations et des espaces dans l'indentation

Remarquez le TabError au lieu de l'habituel Erreur de syntaxe. Python indique la ligne du problème et vous envoie un message d'erreur utile. Il vous indique clairement qu’il existe un mélange de tabulations et d’espaces utilisés pour l’indentation dans le même fichier.

La solution consiste à faire en sorte que toutes les lignes du même fichier de code Python utilisent des tabulations ou des espaces, mais pas les deux. Pour les blocs de code ci-dessus, le correctif consisterait à supprimer la languette et à la remplacer par 4 espaces, ce qui imprimera 'terminé' après le pour la boucle est terminée.

Définir et appeler des fonctions

Vous pouvez rencontrer une syntaxe non valide en Python lorsque vous définissez ou appelez des fonctions. Par exemple, vous verrez un Erreur de syntaxe si vous utilisez un point-virgule au lieu de deux points à la fin d'une définition de fonction:

>>>

>>> def amusement();
  Fichier "", ligne 1
    def amusement();
             ^
Erreur de syntaxe: Syntaxe invalide

La trace ici est très utile, le curseur pointant directement sur le caractère problématique. Vous pouvez supprimer cette syntaxe non valide en Python en remplaçant le point-virgule par un deux-points.

En plus, arguments de mots clés dans les définitions de fonction et les appels de fonction doivent être dans le bon ordre. Arguments de mots clés toujours venir après les arguments de position. Le non-respect de cette commande entraînera un Erreur de syntaxe:

>>>

>>> def amusement(une, b):
...     impression(une, b)
...
>>> amusement(une=1, 2)
  Fichier "", ligne 1
Erreur de syntaxe: argument positionnel suit argument mot clé

Ici encore, le message d'erreur est très utile pour vous dire exactement ce qui ne va pas avec la ligne.

Changer les versions de Python

Parfois, un code qui fonctionne parfaitement dans une version de Python se transforme en une version plus récente. Cela est dû aux changements officiels dans la syntaxe de la langue. L’exemple le plus connu est le impression déclaration, qui est passée d’un mot-clé de Python 2 à une fonction intégrée de Python 3:

>>>

>>> # Syntaxe Python 2 valide qui échoue dans Python 3
>>> impression 'Bonjour'
  Fichier "", ligne 1
    impression 'Bonjour'
                ^
Erreur de syntaxe: Les parenthèses manquantes dans l'appel à 'imprimer'. Voulez-vous dire imprimer ('bonjour')?

C’est l’un des exemples où le message d’erreur fourni avec le message Erreur de syntaxe brille! Non seulement cela vous indique-t-il qu'il manque des parenthèses dans le impression appeler, mais il fournit également le code correct pour vous aider à corriger la déclaration.

Un autre problème que vous pouvez rencontrer est, lorsque vous lisez ou apprenez sur une syntaxe, une syntaxe valide dans une version plus récente de Python, mais non valide dans la version que vous écrivez. Un exemple de ceci est la syntaxe f-string, qui n'existait pas dans les versions de Python antérieures à 3.6:

>>>

>>> # Toute version de python antérieure à 3.6 incluant 2.7
>>> w ='monde'
>>> impression(F'Bonjour, w')
  Fichier "", ligne 1
    impression(F'Bonjour, w')
                      ^
Erreur de syntaxe: Syntaxe invalide

Dans les versions de Python antérieures à 3.6, l’interprète ne connaissait rien de la syntaxe f-string et fournirait simplement un "Syntaxe invalide" message. Le problème, dans ce cas, est que le code regards parfaitement bien, mais il a été exécuté avec une version plus ancienne de Python. En cas de doute, vérifiez quelle version de Python vous utilisez!

La syntaxe Python continue d'évoluer et de nouvelles fonctionnalités intéressantes ont été introduites dans Python 3.8:

Si vous souhaitez essayer certaines de ces nouvelles fonctionnalités, vous devez vous assurer que vous travaillez dans un environnement Python 3.8. Sinon, vous aurez un Erreur de syntaxe.

Python 3.8 fournit également le nouveau SyntaxWarning. Vous verrez cet avertissement dans les cas où la syntaxe est valide mais semble quand même suspecte. Un exemple de cela serait s'il vous manquait une virgule entre deux n-uplets dans une liste. Ce serait une syntaxe valide dans les versions de Python antérieures à 3.8, mais le code soulèverait une Erreur-type parce qu'un tuple n'est pas appelable:

>>>

>>> [([([([(1,2) (2,3)]
Traceback (dernier appel le plus récent):
  Fichier "", ligne 1, dans 
Erreur-type: L'objet 'tuple' n'est pas appelable

Cette Erreur-type Cela signifie que vous ne pouvez pas appeler un tuple comme une fonction, ce que l’interprète Python pense que vous êtes en train de faire.

En Python 3.8, ce code pose toujours le problème Erreur-type, mais maintenant vous verrez aussi SyntaxWarning cela indique comment résoudre le problème:

>>>

>>> [([([([(1,2) (2,3)]
: 1: SyntaxWarning: l'objet 'tuple' n'est pas appelable; peut-être avez-vous manqué une virgule?
Traceback (dernier appel le plus récent):   
  Fichier "", ligne 1, dans     
Erreur-type: L'objet 'tuple' n'est pas appelable

Le message utile accompagnant la nouvelle SyntaxWarning fournit même un indice ("Peut-être avez-vous manqué une virgule?") pour vous diriger dans la bonne direction!

Conclusion

Dans ce tutoriel, vous avez vu quelles informations le Erreur de syntaxe traceback vous donne. Vous avez également vu de nombreux exemples courants de syntaxe non valide en Python et les solutions à ces problèmes. Cela accélérera non seulement votre flux de travail, mais vous fera également un relecteur de code plus utile!

Lorsque vous écrivez du code, essayez d’utiliser un environnement de développement intégré qui comprend la syntaxe Python et fournit des commentaires. Si vous mettez de nombreux exemples de code Python non valides de ce didacticiel dans un bon IDE, ils doivent alors mettre en évidence les lignes qui posent problème avant même que vous n'ayez à exécuter votre code.

Obtenir un Erreur de syntaxe Bien que vous appreniez Python, cela peut être frustrant, mais vous savez maintenant comment comprendre les messages de trace et quelles formes de syntaxe non valide vous risquez de rencontrer. La prochaine fois que vous obtenez un Erreur de syntaxe, vous serez mieux équipé pour résoudre le problème rapidement!