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
Robust! Mini-Projekt: Highscore.