Erreur Python : IndentationError

NSI Première

Définition

L'IndentationError signale un problème d'indentation : en Python, le décalage à gauche (les espaces en début de ligne) sert à délimiter les blocs de code, il n'est donc pas décoratif mais obligatoire. Le message `IndentationError: expected an indented block` apparaît quand un bloc attendu après `if`, `for`, `while` ou `def` (ligne se terminant par `:`) n'est pas indenté, tandis que `IndentationError: unexpected indent` survient quand une ligne est décalée alors qu'aucun bloc ne le justifie. C'est une erreur de syntaxe détectée avant même l'exécution du programme.

Exemple corrigé

Énoncé

Voici un code qui déclenche cette erreur :

```python
for i in range(3):
print(i)
```

À l'exécution, Python s'arrête immédiatement et affiche :

```
File "exemple.py", line 2
print(i)
^
IndentationError: expected an indented block after 'for' statement on line 1
```

Solution

La cause : la ligne `for i in range(3):` se termine par `:`, donc Python attend en dessous un bloc indenté (le corps de la boucle). Or `print(i)` est collé tout à gauche, au même niveau que le `for` : Python ne le considère donc pas comme appartenant à la boucle, et signale qu'il manque le bloc.

Code corrigé :

```python
for i in range(3):
print(i)
```

Les 4 espaces devant `print(i)` indiquent que cette instruction est à l'intérieur de la boucle.

Le bon réflexe : après chaque ligne se terminant par `:`, va à la ligne et indente toujours de 4 espaces ce qui doit être exécuté à l'intérieur du bloc.

Erreurs classiques

  • Mélanger espaces et tabulations : visuellement le code paraît aligné, mais Python lève un `TabError` (cousin de l'IndentationError). Configure ton éditeur pour insérer 4 espaces quand tu appuies sur Tab.
  • Indenter de façon irrégulière dans un même bloc (par ex. 2 espaces sur une ligne, 4 sur la suivante) déclenche `IndentationError: unexpected indent`. Garde le même décalage pour toutes les lignes d'un bloc.
  • Confondre l'IndentationError avec une SyntaxError classique : ici le code est correct, c'est seulement l'alignement à gauche qui pose problème, pas le contenu de l'instruction.

Toutes les notions