Erreur Python : IndexError

NSI Première

Définition

Une IndexError survient lorsqu'on essaie d'accéder à un élément d'une liste (ou d'une chaîne, d'un tuple) en utilisant un indice qui n'existe pas, c'est-à-dire en dehors des bornes de la séquence. Python affiche alors le message `IndexError: list index out of range`. La cause la plus fréquente est d'oublier que les indices commencent à `0` : dans une liste de `n` éléments, le dernier indice valide est `n-1`, pas `n`.

Exemple corrigé

Énoncé

Voici un code qui déclenche cette erreur :

```python
notes = [12, 15, 8, 17]
# On veut afficher chaque note
for i in range(1, len(notes) + 1):
print("Note", i, ":", notes[i])
```

Exécution :

```
IndexError: list index out of range
```

Solution

La liste `notes` contient 4 éléments, donc les indices valides vont de `0` à `3`. Or la boucle `range(1, len(notes) + 1)` produit les valeurs `1, 2, 3, 4` : au dernier tour, on accède à `notes[4]`, qui n'existe pas, d'où l'erreur.

Code corrigé :

```python
notes = [12, 15, 8, 17]
for i in range(len(notes)):
print("Note", i + 1, ":", notes[i])
```

`range(len(notes))` produit `0, 1, 2, 3`, exactement les indices valides ; on ajoute `+ 1` seulement pour l'affichage.

Le bon réflexe : pour parcourir une liste de `n` éléments, les indices vont de `0` à `n-1`, donc utilisez `range(len(liste))` plutôt que de coder les bornes à la main.

Erreurs classiques

  • Oublier que l'indexation commence à `0` : dans une liste de 4 éléments, `liste[4]` n'existe pas, le dernier est `liste[3]`.
  • Confondre IndexError (indice hors bornes d'une liste/chaîne) et KeyError (clé absente d'un dictionnaire).
  • Si on veut juste parcourir les valeurs, préférer `for note in notes:` qui évite totalement les indices et donc tout risque d'IndexError.

Toutes les notions