name 'X' is not defined

Python Erreur courante

Explication

L'erreur `NameError: name 'X' is not defined` signifie que vous utilisez un **nom** (variable, fonction, classe) que Python ne connaît pas à cet endroit du code. Le nom n'a pas encore été défini, comporte une faute de frappe, ou n'existe que dans une autre portée (scope). ```python print(message) # 'message' n'a jamais été défini # NameError: name 'message' is not defined ```

Causes courantes

- **Faute de frappe** ou **mauvaise casse** : `Message` ≠ `message`. - **Utilisation avant la définition** : vous lisez la variable avant la ligne qui l'affecte. - **Portée locale** : une variable définie dans une fonction n'existe pas à l'extérieur. - **Import oublié** : `sqrt(9)` sans `from math import sqrt`. - **Chaîne sans guillemets** : `statut = actif` traite `actif` comme une variable au lieu du texte `"actif"`.

1. Définissez le nom avant de l'utiliser

message = "Bonjour"
print(message)   # ✅

2. Vérifiez l'orthographe et la casse

Python est sensible à la casse : total, Total et TOTAL sont trois noms différents.

3. Importez ce qui vient d'un module

from math import sqrt
print(sqrt(9))   # ✅ 3.0

4. Mettez les chaînes entre guillemets

statut = "actif"   # ✅ texte, pas une variable

5. En production : attention aux portées

Une variable créée dans une fonction n'est pas visible ailleurs. Renvoyez-la (return) ou passez-la en argument plutôt que de compter sur une variable « globale » implicite.

Comment prevenir cette erreur

- **Activez un linter** (`ruff`, `pyflakes`, `pylint`) : il signale les noms non définis avant l'exécution. - **Nommez de façon cohérente** et évitez les abréviations ambiguës. - Utilisez l'**autocomplétion** de votre éditeur pour éviter les fautes de frappe. - Référence : [docs.python.org — NameError](https://docs.python.org/fr/3/library/exceptions.html#NameError).

Besoin d'aide sur votre projet ?

Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.

Nous contacter

Questions frequentes

Quelle différence entre `NameError` et `UnboundLocalError` ?
`NameError` signifie que le nom n'existe nulle part d'accessible. `UnboundLocalError` (un sous-type) survient quand vous affectez une variable dans une fonction tout en la lisant avant cette affectation : Python la considère alors comme locale et non encore définie.
Pourquoi `print("Bonjour " + nom)` lève-t-il une `NameError` ?
Parce que `nom` n'a pas été défini avant cette ligne. Définissez `nom = "..."` au préalable, ou vérifiez qu'il n'y a pas de faute de frappe (`Nom`, `nom_`...).

Erreurs similaires

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.