Qu'est-ce qu'une erreur de syntaxe ?
Une erreur de syntaxe est une faute dans la structure du code, comme un deux-points, une parenthèse ou un guillemet manquant, qui enfreint les règles de grammaire d'un langage de programmation. Le compilateur ou l'interpréteur rejette le programme avant qu'une seule ligne ne s'exécute.
Mis à jour le 24 septembre 2026
Avant d'exécuter une seule ligne de ton programme, Python lit tout le fichier et vérifie qu'il respecte la grammaire du langage. Si une seule ligne enfreint cette grammaire, rien ne s'exécute. Lance ce programme et observe ce qui ne se passe pas : le premier print n'affiche jamais rien.
File "main.py", line 4
if temperature > 30
^
SyntaxError: expected ':'
La ligne 1 est parfaitement valide, et pourtant « Checking the temperature » n'apparaît pas dans la sortie. Python a rejeté le fichier en entier parce qu'une ligne if doit se terminer par un deux-points. Ajoute le : après 30, relance, et les deux lignes s'affichent.
Comment une erreur de syntaxe est détectée
Chaque langage de programmation a une grammaire : quels mots sont autorisés, où les parenthèses s'ouvrent et se ferment, ce qui doit suivre if. Le programme qui la vérifie s'appelle un parseur (ou analyseur syntaxique), et il intervient dans la première étape de la transformation du code source en quelque chose qu'une machine peut exécuter.
- Le tokenizer découpe le texte en tokens (unités lexicales) :
if,temperature,>,30, et ainsi de suite. - Le parseur lit les tokens dans l'ordre et les fait entrer dans la grammaire. Après
if temperature > 30, il attend un:, mais il trouve la fin de la ligne. - Il s'arrête et signale l'endroit où il a abandonné : le fichier, le numéro de ligne, et un accent circonflexe (
^) sous la position. - Comme l'analyse a échoué, aucun code n'est généré, donc aucune ligne du programme ne s'exécute.
Dans CPython, le parseur tourne à chaque lancement d'un script. Dans les langages qui ont une étape de compilation séparée, c'est le compilateur qui fait cette vérification : gcc, clang et javac refusent de produire un programme tant qu'il reste une seule erreur de syntaxe. C'est pour cela que les erreurs de syntaxe comptent parmi les erreurs de compilation, par opposition à une erreur d'exécution, qui se produit pendant que le programme tourne déjà.
Erreurs de syntaxe courantes en Python
Voici les fautes à l'origine de la plupart des erreurs de syntaxe que voient les débutants, avec le message exact qu'affiche Python 3.12.
| Code | Message | Correction |
|---|---|---|
if x > 3 | SyntaxError: expected ':' | Termine les lignes if, for, while, def et class par : |
print("Hi" | SyntaxError: '(' was never closed | Ferme chaque parenthèse que tu ouvres |
name = "Ada | SyntaxError: unterminated string literal (detected at line 1) | Ferme le guillemet |
if x = 5: | SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='? | Compare avec == |
print "Hi" | SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? | Python 3 exige print(...) |
if a > 0 && b > 0: | SyntaxError: invalid syntax | Python utilise and, or et not |
Un if sans ligne indentée en dessous | IndentationError: expected an indented block after 'if' statement on line 1 | Indente le corps de quatre espaces |
IndentationError est une sorte de SyntaxError : en Python, l'indentation fait partie de la grammaire.
Toutes les fautes de frappe ne sont pas des erreurs de syntaxe. pritn("hello") respecte parfaitement la grammaire, car un nom suivi de parenthèses est un appel de fonction. Python ne découvre qu'aucune fonction nommée pritn n'existe qu'en arrivant à cette ligne, et il lève alors NameError: name 'pritn' is not defined. Did you mean: 'print'?. C'est une erreur d'exécution, et toutes les lignes au-dessus se sont déjà exécutées.
Pourquoi la ligne signalée peut être la mauvaise
Le parseur signale l'endroit où il ne pouvait plus continuer, qui n'est pas toujours l'endroit de la faute. Le crochet non fermé est le cas classique : le parseur ne peut pas savoir que le crochet n'a jamais été fermé avant d'avoir dépassé l'endroit où il aurait dû l'être.
File "main.py", line 1
prices = [4.50, 3.20, 7.80
^
SyntaxError: '[' was never closed
Python 3.10 et les versions suivantes pointent sur le [ ouvrant de la ligne 1. Python 3.9 et les versions plus anciennes signalaient seulement invalid syntax à la ligne 2, la ligne après la vraie faute. Donc quand une ligne signalée semble correcte, vérifie la fin de la ligne du dessus.
Les autres parseurs se comportent de la même façon. Avec SELECT name FORM users;, où FROM est mal orthographié, SQLite lit FORM comme un alias (un second nom) de la colonne name et n'échoue qu'un mot plus loin :
Parse error near line 1: near "users": syntax error
SELECT name FORM users;
^--- error here
Erreurs de syntaxe en C, Java et JavaScript
Les langages compilés signalent les erreurs de syntaxe à la compilation, pas à l'exécution. Voici une déclaration sans son point-virgule, compilée avec Clang (le compilateur que la commande gcc lance sur macOS) :
#include <stdio.h>
int main(void) {
int count = 3
printf("%d\n", count);
return 0;
}
main.c:4:18: error: expected ';' at end of declaration
javac signale la même faute en Java sous la forme error: ';' expected, et aucun fichier .class n'est écrit. En C, une seule accolade manquante peut produire une douzaine d'erreurs plus bas dans le fichier. Corrige la première et recompile, car les autres en sont souvent la conséquence.
Les moteurs JavaScript comme V8 analysent un script entier avant de l'exécuter, exactement comme Python. Node.js rejette ce fichier avant d'afficher « start » :
console.log("start");
if (x > 1 {
console.log("big");
}
SyntaxError: Unexpected token '{'
Dans un navigateur, une erreur de syntaxe empêche ce seul fichier de script de s'exécuter, tandis que les autres scripts de la page tournent quand même.
Comment corriger une erreur de syntaxe
- Lis d'abord la dernière ligne du message. Elle nomme le problème : un
:manquant, une(non fermée, un token inattendu. - Va à la ligne signalée et regarde l'accent circonflexe. Si la ligne semble correcte, vérifie la ligne du dessus.
- Vérifie les paires. Chaque
(,[,{et chaque guillemet a besoin d'un partenaire. La plupart des éditeurs mettent en évidence la parenthèse correspondante quand le curseur est à côté. - Vérifie la ponctuation qu'exige le langage : deux-points et indentation en Python, points-virgules et accolades en C, Java et JavaScript.
- Corrige seulement la première erreur, puis relance. Les messages suivants sont souvent causés par la première.
- Observe la coloration syntaxique. Après un guillemet non fermé, le reste du fichier prend généralement la couleur d'une chaîne, ce qui te montre où il a commencé.
La bonne nouvelle, c'est que les erreurs de syntaxe sont les plus faciles à corriger : l'outil te dit que quelque chose ne va pas, et à peu près où. Les types plus difficiles arrivent plus tard, quand le code s'exécute.
Pour aller plus loin
Un programme qui passe le parseur peut encore planter pendant son exécution : c'est une erreur d'exécution. Un programme qui s'exécute jusqu'au bout mais affiche la mauvaise réponse contient une erreur logique, et cette page compare les trois types dans un seul tableau. Pour les règles de grammaire elles-mêmes, lis la syntaxe Python ou la syntaxe du C, et pratique-les dans le cours Python.
Questions fréquentes
Quel est un exemple d'erreur de syntaxe ?
print("Hello" est une erreur de syntaxe, tout comme une ligne if sans son deux-points en Python : if x > 3. En C et en Java, le point-virgule manquant à la fin d'une instruction est l'erreur la plus fréquente. Dans tous les cas, le code ne respecte pas la grammaire, donc il ne peut pas s'exécuter.Quelle est la différence entre une erreur de syntaxe et une erreur sémantique ?
int en Java ; d'autres l'utilisent comme autre nom pour une erreur logique.Qu'est-ce qu'une erreur de syntaxe en C ?
gcc et clang affichent le fichier, la ligne et la colonne, par exemple main.c:4:18: error: expected ';' at end of declaration, et ne produisent aucun exécutable tant qu'il reste une erreur.Pourquoi Python ne corrige-t-il pas les erreurs de syntaxe tout seul ?
Did you mean print(...)?, mais te laissent décider.Que veut dire « erreur de syntaxe » sur une calculatrice ?
ERR:SYNTAX.