Zum Hauptinhalt springen

Daten sicher laden

Typische Probleme

  • Datei existiert noch nicht
  • Datei ist leer/kaputt
  • falsches Format

Robustes Muster

import json

def lade_scores(pfad):
try:
with open(pfad, "r", encoding="utf-8") as f:
return json.load(f)
except FileNotFoundError:
return []
except json.JSONDecodeError:
print("Datei beschaedigt – starte leer.")
return []

scores = lade_scores("scores.json")
print(scores)

Speichern bleibt einfach

def speichere_scores(pfad, daten):
with open(pfad, "w", encoding="utf-8") as f:
json.dump(daten, f, indent=2, ensure_ascii=False)

Rate mal!

Warum bei fehlender Datei [] zurückgeben?

Auflösung

Dann kann das Programm mit einer leeren Liste weiterarbeiten und später speichern.

Probiere es selbst

Experiment 1

Lade nicht existente Datei abgesichert.

Experiment 2

Funktion lade/speichere.

Experiment 3

Neuen Score anhängen und speichern.

Fehlerdetektiv

with open("x.json") as f:
json.load(f)

Ohne except knallt es, wenn die Datei fehlt.

Übungen

Level 1

FileNotFoundError abfangen, Default {}.

Level 2

Funktion lade_oder_leer.

Level 3

Highscore-Eintrag hinzufügen, speichern, neu laden.

Level-1-Lösung
import json
try:
with open("x.json", "r", encoding="utf-8") as f:
daten = json.load(f)
except FileNotFoundError:
daten = {}
print(daten)

Mini-Quiz

Mini-QuizWas fängt man ab, wenn die JSON-Datei fehlt?

Robust! Mini-Projekt: Highscore.