Comprendre la SyntaxError en Python

Lorsqu’on écrit du code en Python, l’interpréteur essaie de le parser en byte code. Je dis essaie parce que Python est simple mais contraignant : il faut respecter la syntaxe.

En général la traceback est explicite en indiquant la ligne concernée :

(1) print "hello World"

Le message d’erreur :

         File "", line 1
print "hello World"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("hello World")?

Mais ce n’est pas toujours aussi évident :

(1) me = {
(2)      'name': 'hubert',
(3)      'city': 'Paris'
(4)      'age': 25
(5) }

Le message d’erreur indique une erreur sur la ligne 4 alors qu’il manque une virgule sur la ligne précédente :

File "", line 4
      'age': 25
              ^
  SyntaxError: invalid syntax

Parce qu’il montre où cette erreur de syntaxe pose problème.

IndentationError et TabError

IndentationError et TabError sont des formes de SyntaxError spécifiquement lorsque l’indentation du code n’est pas respectée. Il n’existe pas de règles pour l’indentation, juste de bonnes pratiques.

L’idée étant de toujours utiliser le même nombre d’espace, sans quoi une IndentationError sera générée. A contrario le mélange de space et tab provoquera une TabError. Il est recommendé par le PEP 8 d’utililiser 4 spaces pour l’indentation.

Grosso modo

Voilà des trucs qui pourraient générer une SyntaxtError :

  • l’absence de parenthèses. Comme on l’a vu précédemment, print() prend des parenthèses avec Python3 là où en Python2 ce n’était pas obligé.
  • les quotes dans des quotes annulent les quotes. Utiliser des caractères d’échappement ou des guillemets pour mettre une quote dans une chaîne de caractère.

Ça provoque une erreur :

my_t = 'everything is  'okay ''
my_t = "everything is  okay'

Une manière de corriger :

my_t = "everything is 'okay'" my_t = 'everything is  \'okay \''
  • ne pas respecter les mots clés. Par exemple, il n’est pas possible de nommer une variable avec un mot clé. De même pour une fonction.