IndentationError Python : Comprendre et Corriger en 2 Min

5 min de lecture Python

Python est le seul langage populaire où l'indentation fait partie de la syntaxe. Un espace en trop ou en moins et tout casse. Voici les 4 types d'erreurs d'indentation et comment les corriger en 2 minutes.

Les 4 types d'IndentationError

1. "expected an indented block"

Tu as oublié d'indenter le bloc après un if, for, def, class ou while.

# ❌ Pas d'indentation après le if
if age >= 18:
print("Majeur")  # IndentationError: expected an indented block

# ✅ Indenter de 4 espaces
if age >= 18:
    print("Majeur")

# ❌ Fonction vide
def ma_fonction():
# IndentationError

# ✅ Utiliser pass pour un bloc vide
def ma_fonction():
    pass

Règle : après chaque ligne qui finit par :, la ligne suivante DOIT être indentée.

2. "unexpected indent"

Une ligne est indentée alors qu'elle ne devrait pas l'être.

# ❌ La 2e ligne est indentée sans raison
nom = "Ali"
    age = 25  # IndentationError: unexpected indent

# ✅ Même niveau d'indentation
nom = "Ali"
age = 25

# ❌ Indentation après un commentaire
# Calcul du total
    total = prix * quantite  # IndentationError

# ✅
# Calcul du total
total = prix * quantite

3. "unindent does not match"

Les niveaux d'indentation sont incohérents dans un même bloc.

# ❌ Niveaux mixtes (4 espaces puis 3)
if True:
    print("a")
   print("b")  # IndentationError: unindent does not match

# ✅ Toujours le même nombre d'espaces
if True:
    print("a")
    print("b")

# ❌ Mélange dans une boucle
for i in range(5):
    if i > 2:
        print(i)
      print("fin")  # IndentationError

# ✅ Aligner correctement
for i in range(5):
    if i > 2:
        print(i)
    print("fin")  # Au niveau du for, pas du if

4. "inconsistent use of tabs and spaces"

Tu mélanges des tabulations et des espaces. C'est le piège le plus vicieux parce que visuellement, ça peut sembler identique.

# ❌ Ligne 1 avec tab, ligne 2 avec espaces (invisible !)
def saluer(nom):
\tprint(f"Bonjour {nom}")    # tab
    print(f"Comment vas-tu ?")  # 4 espaces → TabError!

# ✅ Tout en espaces (4 espaces)
def saluer(nom):
    print(f"Bonjour {nom}")
    print(f"Comment vas-tu ?")

Tabs ou espaces ? La réponse définitive

4 espaces. Point final. C'est ce que dit PEP 8 (le guide de style officiel Python), et c'est ce qu'utilisent 95% des développeurs Python.

Configure ton éditeur une fois et n'y pense plus :

// VS Code — settings.json
{
  "[python]": {
    "editor.tabSize": 4,
    "editor.insertSpaces": true,
    "editor.detectIndentation": false
  }
}

Comment détecter les espaces invisibles

Les 3 réflexes à prendre

  1. Configurer l'éditeur en 4 espaces — une seule fois, plus jamais de problème
  2. Ne jamais copier-coller du code depuis un PDF ou un navigateur sans vérifier l'indentation — les copier-coller cassent souvent les espaces
  3. Utiliser un linterruff ou flake8 détectent les problèmes d'indentation avant l'exécution
# Installer ruff (le linter Python le plus rapide)
pip install ruff

# Vérifier un fichier
ruff check mon_script.py

# Corriger automatiquement
ruff check --fix mon_script.py

FAQ

Pourquoi Python utilise l'indentation au lieu des accolades ?
Guido van Rossum (créateur de Python) voulait forcer un code lisible. En Python, la structure visuelle EST la structure logique. Pas d'accolades = pas de code illisible avec des blocs mal indentés.

Est-ce que je peux utiliser 2 espaces au lieu de 4 ?
Techniquement oui, Python accepte n'importe quel nombre constant d'espaces. Mais PEP 8 recommande 4, et tout l'écosystème utilise 4. Utiliser 2 va créer des conflits avec les librairies et les linters.

Comment corriger l'indentation d'un fichier entier ?
Dans VS Code : Ctrl+A (tout sélectionner) → Ctrl+Shift+P → "Format Document". Ou utilise autopep8 : autopep8 --in-place fichier.py.


Pour les bases de Python, consulte le guide complet Python pour débutants. Et pour les fonctions et les boucles for où l'indentation est cruciale.

Envie de pratiquer ? GoGoKodo propose des ateliers interactifs pour apprendre Python en codant directement dans le navigateur — 100% gratuit.