string index out of range
Python
Erreur courante
Explication
L'erreur `IndexError: string index out of range` survient quand vous accédez à un **indice de caractère qui n'existe pas** dans une chaîne. Les indices valides vont de `0` à `len(chaine) - 1` ; au-delà (ou sur une chaîne vide), l'accès échoue.
```python
mot = "abc"
print(mot[5]) # les indices valides sont 0, 1, 2
# IndexError: string index out of range
```
Causes courantes
- **Indice supérieur** à `len(chaine) - 1`. - **Chaîne vide** suivie d'un accès `chaine[0]`. - **Erreur de décalage** (« off-by-one ») dans une boucle. - **Chaîne plus courte que prévu** (saisie, parsing).
1. Vérifiez la longueur avant d'accéder
if len(mot) > 5:
print(mot[5])
2. Parcourez les caractères directement
for c in mot: # ✅ aucun IndexError possible
print(c)
3. Utilisez le découpage (slicing), qui ne lève jamais d'erreur
print(mot[5:]) # "" si hors limites, pas d'erreur
print(mot[-1] if mot else "") # dernier caractère en sécurité
Comment prevenir cette erreur
- **Parcourez** (`for c in chaine`) plutôt que d'indexer manuellement.
- **Testez `if chaine:`** avant d'accéder à `chaine[0]`.
- **Préférez le slicing** (`chaine[i:j]`) qui tronque silencieusement au lieu de lever une erreur.
- Référence : [docs.python.org — str](https://docs.python.org/fr/3/library/stdtypes.html#text-sequence-type-str).
Besoin d'aide sur votre projet ?
Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.
Nous contacterQuestions frequentes
Pourquoi `mot[5:]` ne lève-t-il pas d'erreur alors que `mot[5]` si ?
Parce que le **découpage** (slicing) est tolérant : il renvoie une chaîne vide si la plage dépasse, tandis que l'**indexation** d'un seul caractère exige que l'indice existe.
Comment récupérer le dernier caractère sans risque ?
`mot[-1]`, mais seulement après avoir vérifié que la chaîne n'est pas vide : `mot[-1] if mot else ""`.