Comment résoudre l'erreur 'NameError: name 'json' is not defined' en Python

PythonBeginner
Pratiquer maintenant

Introduction

Python est un langage de programmation puissant, mais même les développeurs expérimentés rencontrent des erreurs pendant le développement. Une erreur courante à laquelle les débutants sont confrontés est la NameError: name 'json' is not defined lorsqu'ils essaient de travailler avec des données JSON. Ce tutoriel vous guidera à travers la compréhension, la reproduction et la résolution de cette erreur pour garantir que votre code Python s'exécute sans problème.

À la fin de ce lab, vous comprendrez pourquoi cette erreur se produit et apprendrez la bonne façon d'importer et d'utiliser le module JSON dans vos applications Python.

Comprendre le NameError en Python

Un NameError en Python se produit lorsque l'interpréteur ne peut pas trouver une variable, une fonction ou un module que vous essayez d'utiliser. Cette erreur a généralement l'une des causes suivantes :

  1. Utilisation d'une variable avant de la définir
  2. Faute de frappe dans le nom d'une variable ou d'une fonction
  3. Oubli d'importer un module avant de l'utiliser

Exploration d'un exemple simple de NameError

Commençons par créer un script simple qui génère un NameError. Ouvrez l'éditeur de code et créez un nouveau fichier nommé name_error_example.py dans le répertoire /home/labex/project avec le contenu suivant :

## This script demonstrates a simple NameError
print("Starting the script...")

## Try to use a variable that hasn't been defined
print(undefined_variable)

print("This line won't execute because of the error above")

Maintenant, exécutons ce script. Ouvrez un terminal et exécutez :

python3 /home/labex/project/name_error_example.py

Vous devriez voir une sortie similaire à :

Starting the script...
Traceback (most recent call last):
  File "/home/labex/project/name_error_example.py", line 5, in <module>
    print(undefined_variable)
NameError: name 'undefined_variable' is not defined

Ce message d'erreur nous indique :

  • Le type d'erreur : NameError
  • Le problème spécifique : name 'undefined_variable' is not defined
  • L'emplacement : Ligne 5 dans le script

L'interpréteur Python a déclenché cette erreur parce que nous avons essayé d'utiliser une variable appelée undefined_variable sans la définir au préalable. C'est le même type d'erreur qui se produit lorsque vous essayez d'utiliser le module json sans l'importer.

Reproduction du NameError JSON

Maintenant que nous comprenons ce qu'est un NameError, reproduisons l'erreur spécifique mentionnée dans le titre : NameError: name 'json' is not defined.

Création d'un script avec l'erreur JSON

Créez un nouveau fichier nommé json_error.py dans le répertoire /home/labex/project avec le contenu suivant :

## This script tries to use the json module without importing it

## Sample JSON string
json_string = '{"name": "Alice", "age": 30, "city": "New York"}'

## Try to parse JSON without importing the json module
parsed_data = json.loads(json_string)

print("User data:", parsed_data)

Dans ce script, nous essayons d'utiliser la fonction json.loads() pour analyser une chaîne JSON, mais nous n'avons pas importé le module json au préalable.

Exécutons le script et voyons ce qui se passe :

python3 /home/labex/project/json_error.py

Vous devriez voir un message d'erreur comme celui-ci :

Traceback (most recent call last):
  File "/home/labex/project/json_error.py", line 7, in <module>
    parsed_data = json.loads(json_string)
NameError: name 'json' is not defined

C'est exactement l'erreur que nous essayons de résoudre dans ce lab ! L'interpréteur Python ne peut pas trouver le module json parce que nous ne l'avons pas importé avant d'essayer de l'utiliser.

Comprendre le module JSON

Avant de corriger l'erreur, comprenons ce qu'est le module JSON :

  • JSON (JavaScript Object Notation) est un format d'échange de données léger
  • Python inclut un module json intégré pour travailler avec les données JSON
  • Le module json fournit des méthodes pour encoder des objets Python en chaînes JSON et décoder des chaînes JSON en objets Python
  • Les fonctions courantes incluent json.dumps() (convertir Python en JSON) et json.loads() (convertir JSON en Python)

Comme tous les modules Python, vous devez importer le module json avant de pouvoir utiliser ses fonctions.

Correction du NameError JSON

Maintenant que nous avons reproduit l'erreur, corrigeons-la en important correctement le module JSON.

Ajout de l'instruction d'importation

Ouvrez le fichier json_error.py et mettez-le à jour en ajoutant une instruction d'importation en haut :

## This script properly uses the json module by importing it first
import json

## Sample JSON string
json_string = '{"name": "Alice", "age": 30, "city": "New York"}'

## Parse JSON after importing the json module
parsed_data = json.loads(json_string)

print("User data:", parsed_data)

Le changement clé est l'ajout de import json au début du fichier. Cela indique à Python de charger le module JSON avant que nous essayions de l'utiliser.

Exécution du script corrigé

Enregistrez le fichier et exécutez-le à nouveau :

python3 /home/labex/project/json_error.py

Cette fois, vous devriez voir le script s'exécuter avec succès avec la sortie :

User data: {'name': 'Alice', 'age': 30, 'city': 'New York'}

Le script s'exécute maintenant sans erreurs car nous avons correctement importé le module json avant de l'utiliser.

Méthodes d'importation alternatives

Il existe plusieurs façons d'importer des modules en Python :

  1. Importer l'intégralité du module (comme nous l'avons fait ci-dessus) :

    import json
    ## Use as json.function_name()
  2. Importer des fonctions spécifiques d'un module :

    from json import loads
    ## Use directly as loads()
  3. Importer avec un alias :

    import json as j
    ## Use as j.function_name()

Essayons la deuxième méthode. Créez un nouveau fichier nommé json_import_variation.py avec :

## Importing specific functions from the json module
from json import loads

## Sample JSON string
json_string = '{"name": "Bob", "age": 25, "city": "San Francisco"}'

## Parse JSON using the directly imported function
parsed_data = loads(json_string)

print("User data:", parsed_data)

Exécutez ce script pour voir qu'il fonctionne également :

python3 /home/labex/project/json_import_variation.py

Vous devriez voir :

User data: {'name': 'Bob', 'age': 25, 'city': 'San Francisco'}

Cela démontre qu'il existe plusieurs façons valides d'importer le module JSON, qui empêcheront toutes le NameError.

Travailler avec les données JSON

Maintenant que nous savons comment importer correctement le module JSON, explorons comment l'utiliser pour les opérations JSON courantes.

Création d'un exemple JSON complet

Créez un nouveau fichier nommé json_operations.py avec le contenu suivant :

## Complete example of working with JSON in Python
import json

## 1. Converting Python object to JSON string (serialization)
user = {
    "name": "Charlie",
    "age": 28,
    "is_student": False,
    "courses": ["Python", "Data Science", "Web Development"],
    "address": {
        "street": "123 Tech Lane",
        "city": "Boston",
        "zipcode": "02101"
    }
}

## Convert Python dictionary to JSON string
json_string = json.dumps(user, indent=2)
print("JSON string created from Python object:")
print(json_string)
print("\n" + "-"*50 + "\n")

## 2. Parse JSON string to Python object (deserialization)
parsed_user = json.loads(json_string)
print("Python object created from JSON string:")
print("Name:", parsed_user["name"])
print("Age:", parsed_user["age"])
print("Courses:", parsed_user["courses"])
print("City:", parsed_user["address"]["city"])
print("\n" + "-"*50 + "\n")

## 3. Writing JSON to a file
with open("/home/labex/project/user_data.json", "w") as json_file:
    json.dump(user, json_file, indent=2)
print("JSON data written to user_data.json")

## 4. Reading JSON from a file
with open("/home/labex/project/user_data.json", "r") as json_file:
    loaded_user = json.load(json_file)
print("JSON data loaded from file. User name:", loaded_user["name"])

Ce script démontre quatre opérations JSON courantes :

  1. Conversion d'un objet Python en une chaîne JSON en utilisant json.dumps()
  2. Analyse d'une chaîne JSON en un objet Python en utilisant json.loads()
  3. Écriture de données JSON dans un fichier en utilisant json.dump()
  4. Lecture de données JSON à partir d'un fichier en utilisant json.load()

Exécutez le script :

python3 /home/labex/project/json_operations.py

Vous devriez voir une sortie similaire à :

JSON string created from Python object:
{
  "name": "Charlie",
  "age": 28,
  "is_student": false,
  "courses": [
    "Python",
    "Data Science",
    "Web Development"
  ],
  "address": {
    "street": "123 Tech Lane",
    "city": "Boston",
    "zipcode": "02101"
  }
}

--------------------------------------------------

Python object created from JSON string:
Name: Charlie
Age: 28
Courses: ['Python', 'Data Science', 'Web Development']
City: Boston

--------------------------------------------------

JSON data written to user_data.json
JSON data loaded from file. User name: Charlie

Le script a également créé un fichier nommé user_data.json. Examinons son contenu :

cat /home/labex/project/user_data.json

Vous devriez voir les données JSON formatées avec une indentation correcte :

{
  "name": "Charlie",
  "age": 28,
  "is_student": false,
  "courses": ["Python", "Data Science", "Web Development"],
  "address": {
    "street": "123 Tech Lane",
    "city": "Boston",
    "zipcode": "02101"
  }
}

Vous avez maintenant appris avec succès comment travailler avec les données JSON en Python, y compris comment éviter l'erreur NameError: name 'json' is not defined en important correctement le module.

Résumé

Dans ce laboratoire, vous avez appris :

  • Ce qu'est un NameError en Python et les causes courantes de cette exception
  • Comment identifier et résoudre l'erreur spécifique NameError: name 'json' is not defined
  • La bonne façon d'importer le module JSON en utilisant différentes options de syntaxe d'importation
  • Comment travailler avec les données JSON en Python, y compris :
    • Convertir des objets Python en chaînes JSON
    • Analyser des chaînes JSON en objets Python
    • Écrire des données JSON dans des fichiers
    • Lire des données JSON à partir de fichiers

Ces compétences sont fondamentales pour travailler avec des données en Python, en particulier lors de la création d'applications qui communiquent avec des services web ou stockent des données de configuration. En comprenant comment importer et utiliser correctement les modules, vous pouvez éviter les erreurs courantes et écrire du code Python plus robuste.

Rappelez-vous que ce modèle s'applique à tous les modules Python, et pas seulement au module JSON. Assurez-vous toujours d'avoir les instructions d'importation appropriées au début de vos fichiers avant d'utiliser toute fonctionnalité externe.