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.