KeyError: 'key_name'
Python
Erreur courante
Explication
L'erreur `KeyError: 'nom_de_cle'` se produit quand vous accédez à une **clé qui n'existe pas** dans un dictionnaire avec la notation crochets `dict["cle"]`. Contrairement à `.get()`, l'accès par crochets exige que la clé existe, sinon il lève une `KeyError`.
```python
user = {"nom": "Alice", "age": 30}
print(user["email"]) # la clé "email" n'existe pas
# KeyError: 'email'
```
Causes courantes
- **Clé absente** ou mal orthographiée (`"e-mail"` vs `"email"`). - **Casse différente** : `"Email"` ≠ `"email"`. - **Données JSON / API** dont le champ est optionnel ou absent. - **Espace invisible** dans la clé (`"email "`). - **Accès à une clé avant de l'avoir définie**.
1. Utilisez .get() avec une valeur par défaut
email = user.get("email") # None si absente
email = user.get("email", "—") # valeur par défaut
2. Vérifiez la présence de la clé
if "email" in user:
print(user["email"])
3. Gérez l'absence avec try / except
Utile quand l'absence est exceptionnelle et doit être traitée :
try:
email = user["email"]
except KeyError:
email = demander_email(user)
4. Dictionnaire avec valeur par défaut automatique
Pour des compteurs ou regroupements, defaultdict évite les KeyError :
from collections import defaultdict
compte = defaultdict(int)
for mot in mots:
compte[mot] += 1 # pas besoin d'initialiser la clé
Comment prevenir cette erreur
- **Préférez `.get()`** pour les clés optionnelles ; réservez `dict["cle"]` aux clés garanties.
- **Validez la structure** des données externes (JSON) avec un schéma (`pydantic`, `jsonschema`).
- **Normalisez les clés** (minuscules, `strip()`) si elles viennent de l'extérieur.
- Référence : [docs.python.org — dict.get](https://docs.python.org/fr/3/library/stdtypes.html#dict.get).
Besoin d'aide sur votre projet ?
Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.
Nous contacterQuestions frequentes
Quelle différence entre `dict["cle"]` et `dict.get("cle")` ?
`dict["cle"]` lève une `KeyError` si la clé est absente ; `dict.get("cle")` renvoie `None` (ou une valeur par défaut que vous précisez). Utilisez `.get()` dès que la clé peut manquer.
Comment lister les clés réellement présentes ?
Affichez `list(mon_dict.keys())` ou `print(mon_dict)`. Cela révèle souvent une faute de frappe ou une différence de casse avec la clé recherchée.
Qu'est-ce qu'un `defaultdict` ?
Un dictionnaire de `collections` qui crée automatiquement une valeur par défaut pour toute clé absente (par exemple `0` avec `defaultdict(int)`), ce qui évite les `KeyError` dans les compteurs et regroupements.