list index out of range
Python
Erreur courante
Explication
L'erreur `IndexError: list index out of range` survient quand vous accédez à un **indice qui n'existe pas** dans une liste. En Python, les indices vont de `0` à `len(liste) - 1` : sur une liste de 3 éléments, les indices valides sont `0`, `1`, `2` ; `liste[3]` déclenche l'erreur.
```python
fruits = ["pomme", "poire", "kiwi"]
print(fruits[3]) # le dernier indice valide est 2
# IndexError: list index out of range
```
Causes courantes
- **Confondre longueur et dernier indice** : une liste de 3 éléments n'a pas d'indice `3`. - **Boucle `for i in range(len(liste) + 1)`** : le `+ 1` dépasse. - **Liste plus courte que prévu** (filtrée, vide après traitement). - **Accès `liste[0]` sur une liste potentiellement vide** (résultat de requête, de `split`...). - **Décalage** après une suppression d'éléments pendant l'itération.
1. Vérifiez la longueur avant d'accéder
if len(fruits) > 3:
print(fruits[3])
2. Itérez sur les éléments, pas sur les indices
La façon idiomatique évite complètement les indices :
for fruit in fruits: # ✅ pas d'IndexError possible
print(fruit)
for i, fruit in enumerate(fruits): # si vous avez besoin de l'indice
print(i, fruit)
3. Accédez au dernier élément en sécurité
dernier = fruits[-1] if fruits else None # gère la liste vide
4. En production : gérez la liste vide explicitement
resultats = requete.split(",")
premier = resultats[0] if resultats else ""
Comment prevenir cette erreur
- **Bouclez sur les éléments** (`for x in liste`) ou utilisez `enumerate`, plutôt que `range(len(...))`.
- **Testez `if liste:`** avant d'accéder à `liste[0]`.
- **N'ajoutez pas `+ 1`** à `range(len(liste))` sans raison.
- Référence : [docs.python.org — Séquences](https://docs.python.org/fr/3/tutorial/introduction.html#lists).
Besoin d'aide sur votre projet ?
Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.
Nous contacterQuestions frequentes
Quelle est la différence entre `len(liste)` et le dernier indice ?
Le dernier indice valide est `len(liste) - 1`. Une liste de 5 éléments a une longueur de 5 mais ses indices vont de 0 à 4. C'est la cause numéro un de cette erreur.
Comment accéder au dernier élément sans risque ?
Utilisez `liste[-1]`, mais seulement après avoir vérifié que la liste n'est pas vide : `liste[-1] if liste else None`.
Pourquoi l'erreur apparaît-elle parfois seulement en production ?
Souvent parce que la liste est construite à partir de données réelles (résultat de requête, fichier) qui peuvent être vides ou plus courtes que pendant vos tests. Gérez toujours le cas de la liste vide.