So beheben Sie 'NameError: name 'json' is not defined' in Python

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Python ist eine leistungsstarke Programmiersprache, aber selbst erfahrene Entwickler stoßen während der Entwicklung auf Fehler. Ein häufiger Fehler, mit dem Anfänger konfrontiert werden, ist der NameError: name 'json' is not defined, wenn sie versuchen, mit JSON-Daten zu arbeiten. Dieses Tutorial führt Sie durch das Verständnis, die Reproduktion und die Behebung dieses Fehlers, um sicherzustellen, dass Ihr Python-Code reibungslos läuft.

Am Ende dieses Labors werden Sie verstehen, warum dieser Fehler auftritt, und lernen, wie Sie das JSON-Modul in Ihren Python-Anwendungen korrekt importieren und verwenden.

Verständnis des Python NameError

Ein NameError in Python tritt auf, wenn der Interpreter eine Variable, Funktion oder ein Modul, das Sie verwenden möchten, nicht finden kann. Dieser Fehler hat typischerweise eine der folgenden Ursachen:

  1. Verwendung einer Variable, bevor sie definiert wurde
  2. Falsche Schreibweise eines Variablen- oder Funktionsnamens
  3. Vergessen, ein Modul zu importieren, bevor es verwendet wird

Untersuchen eines einfachen NameError-Beispiels

Beginnen wir mit der Erstellung eines einfachen Skripts, das einen NameError generiert. Öffnen Sie den Code-Editor und erstellen Sie eine neue Datei namens name_error_example.py im Verzeichnis /home/labex/project mit folgendem Inhalt:

## 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")

Nun, lassen Sie uns dieses Skript ausführen. Öffnen Sie ein Terminal und führen Sie aus:

python3 /home/labex/project/name_error_example.py

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

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

Diese Fehlermeldung sagt uns:

  • Der Fehlertyp: NameError
  • Das spezifische Problem: name 'undefined_variable' is not defined
  • Der Ort: Zeile 5 im Skript

Der Python-Interpreter hat diesen Fehler ausgelöst, weil wir versucht haben, eine Variable namens undefined_variable zu verwenden, ohne sie vorher zu definieren. Dies ist die gleiche Art von Fehler, die auftritt, wenn man versucht, das json-Modul zu verwenden, ohne es zu importieren.

Reproduzieren des JSON NameError

Nachdem wir nun verstanden haben, was ein NameError ist, wollen wir den im Titel erwähnten spezifischen Fehler reproduzieren: NameError: name 'json' is not defined.

Erstellen eines Skripts mit JSON-Fehler

Erstellen Sie eine neue Datei namens json_error.py im Verzeichnis /home/labex/project mit folgendem Inhalt:

## 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)

In diesem Skript versuchen wir, die Funktion json.loads() zu verwenden, um eine JSON-Zeichenkette zu parsen, aber wir haben das json-Modul noch nicht importiert.

Lassen Sie uns das Skript ausführen und sehen, was passiert:

python3 /home/labex/project/json_error.py

Sie sollten eine Fehlermeldung wie diese sehen:

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

Dies ist genau der Fehler, den wir in diesem Labor beheben wollen! Der Python-Interpreter kann das json-Modul nicht finden, weil wir es nicht importiert haben, bevor wir versucht haben, es zu verwenden.

Das JSON-Modul verstehen

Bevor wir den Fehler beheben, wollen wir verstehen, was das JSON-Modul ist:

  • JSON (JavaScript Object Notation) ist ein leichtgewichtiges Datenaustauschformat
  • Python enthält ein integriertes json-Modul, um mit JSON-Daten zu arbeiten
  • Das json-Modul bietet Methoden zum Encodieren von Python-Objekten als JSON-Zeichenketten und zum Decodieren von JSON-Zeichenketten in Python-Objekte
  • Häufige Funktionen sind json.dumps() (konvertiert Python in JSON) und json.loads() (konvertiert JSON in Python)

Wie bei allen Python-Modulen müssen Sie das json-Modul importieren, bevor Sie seine Funktionen verwenden können.

Beheben des JSON NameError

Nachdem wir den Fehler reproduziert haben, wollen wir ihn beheben, indem wir das JSON-Modul ordnungsgemäß importieren.

Hinzufügen der Import-Anweisung

Öffnen Sie die Datei json_error.py und aktualisieren Sie sie, indem Sie am Anfang eine Import-Anweisung hinzufügen:

## 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)

Die wichtigste Änderung ist das Hinzufügen von import json am Anfang der Datei. Dies weist Python an, das JSON-Modul zu laden, bevor wir versuchen, es zu verwenden.

Ausführen des korrigierten Skripts

Speichern Sie die Datei und führen Sie sie erneut aus:

python3 /home/labex/project/json_error.py

Dieses Mal sollten Sie sehen, dass das Skript erfolgreich ausgeführt wird, mit der Ausgabe:

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

Das Skript wird jetzt ohne Fehler ausgeführt, da wir das json-Modul ordnungsgemäß importiert haben, bevor wir es verwendet haben.

Alternative Importmethoden

Es gibt verschiedene Möglichkeiten, Module in Python zu importieren:

  1. Importieren Sie das gesamte Modul (wie wir es oben getan haben):

    import json
    ## Use as json.function_name()
  2. Importieren Sie bestimmte Funktionen aus einem Modul:

    from json import loads
    ## Use directly as loads()
  3. Importieren mit einem Alias:

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

Versuchen wir die zweite Methode. Erstellen Sie eine neue Datei namens json_import_variation.py mit:

## 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)

Führen Sie dieses Skript aus, um zu sehen, dass es ebenfalls funktioniert:

python3 /home/labex/project/json_import_variation.py

Sie sollten sehen:

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

Dies zeigt, dass es mehrere gültige Möglichkeiten gibt, das JSON-Modul zu importieren, die alle den NameError verhindern.

Arbeiten mit JSON-Daten

Nachdem wir nun wissen, wie man das JSON-Modul richtig importiert, wollen wir untersuchen, wie man es für gängige JSON-Operationen verwendet.

Erstellen eines vollständigen JSON-Beispiels

Erstellen Sie eine neue Datei namens json_operations.py mit folgendem Inhalt:

## 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"])

Dieses Skript demonstriert vier gängige JSON-Operationen:

  1. Konvertieren eines Python-Objekts in eine JSON-Zeichenkette mit json.dumps()
  2. Parsen einer JSON-Zeichenkette in ein Python-Objekt mit json.loads()
  3. Schreiben von JSON-Daten in eine Datei mit json.dump()
  4. Lesen von JSON-Daten aus einer Datei mit json.load()

Führen Sie das Skript aus:

python3 /home/labex/project/json_operations.py

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

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

Das Skript hat auch eine Datei namens user_data.json erstellt. Werfen wir einen Blick auf ihren Inhalt:

cat /home/labex/project/user_data.json

Sie sollten die JSON-Daten mit der richtigen Einrückung sehen:

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

Sie haben nun erfolgreich gelernt, wie man mit JSON-Daten in Python arbeitet, einschließlich der Vermeidung des Fehlers NameError: name 'json' is not defined durch ordnungsgemäßes Importieren des Moduls.

Zusammenfassung

In diesem Lab haben Sie Folgendes gelernt:

  • Was ein NameError in Python ist und die häufigsten Ursachen für diese Ausnahme
  • Wie man den spezifischen Fehler NameError: name 'json' is not defined identifiziert und behebt
  • Die richtige Art und Weise, das JSON-Modul mit verschiedenen Import-Syntax-Optionen zu importieren
  • Wie man mit JSON-Daten in Python arbeitet, einschließlich:
    • Konvertieren von Python-Objekten in JSON-Zeichenketten
    • Parsen von JSON-Zeichenketten in Python-Objekte
    • Schreiben von JSON-Daten in Dateien
    • Lesen von JSON-Daten aus Dateien

Diese Fähigkeiten sind grundlegend für die Arbeit mit Daten in Python, insbesondere beim Erstellen von Anwendungen, die mit Webdiensten kommunizieren oder Konfigurationsdaten speichern. Durch das Verständnis, wie man Module richtig importiert und verwendet, können Sie häufige Fehler vermeiden und robusteren Python-Code schreiben.

Denken Sie daran, dass dieses Muster für alle Python-Module gilt, nicht nur für das JSON-Modul. Stellen Sie immer sicher, dass Sie die richtigen Import-Anweisungen am Anfang Ihrer Dateien haben, bevor Sie externe Funktionalität verwenden.