Ein Programm liest Dateien und fängt Fehler ab
Ein Python-Programm liest Daten aus einer Textdatei und fängt mit try und except Fehler ab, statt abzustürzen. So wertet es auch Dateien aus, in denen einzelne Zeilen kaputt sind.
Ein Kurs sammelt Testergebnisse in einer Textdatei, eine Zeile pro Person. Manche Zeilen sind leer oder falsch getippt. Ihr Programm soll trotzdem das Ergebnis liefern.
Am Ende dieser Lektion
Notiz
Ich kann eine Textdatei lesen und einen Fehler mit try und except abfangen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Datei | gespeicherter Text, den ein Programm lesen oder schreiben kann | |
| with | öffnet eine Datei und schließt sie am Ende von selbst | with open("punkte.txt") |
| Ausnahme | ein Fehler, der ein Programm anhält, wenn niemand ihn abfängt | ValueError |
| try und except | versucht etwas und fängt einen Fehler ab | except ValueError |
| split | teilt einen Text an einem Zeichen in eine Liste | "a;b".split(";") |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
with open liest eine Datei Zeile für Zeile
open("punkte.txt") öffnet eine Datei. Mit with schließt Python sie am Ende des Blocks von selbst. Eine for-Schleife über die Datei liefert eine Zeile nach der anderen.
Jede Zeile endet mit einem Zeilenumbruch. zeile.strip() entfernt ihn und Leerzeichen an den Rändern.
Eine Datei mit drei Zahlen anlegen
printf '12\n7\n30\n' > punkte.txtHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Zahl der Wörter der Datei zählen
python3 -c "print(len(open('punkte.txt').read().split()))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Leseprogramm in eine Datei schreiben
printf 'summe = 0\nwith open("punkte.txt") as datei:\n for zeile in datei:\n summe = summe + int(zeile)\nprint(summe)\n' > lesen.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Leseprogramm starten
python3 lesen.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
split und int machen aus einer Zeile Daten
Eine Zeile wie Mia;18 ist Text. Mit split(";") teilen Sie sie in eine Liste mit zwei Teilen. Mit int(...) wird der zweite Teil zur Zahl.
Der Code zeigt jeden Schritt. Lesen Sie vor dem Start, welche vier Zeilen herauskommen sollen.
Eine Zeile in ihre Teile zerlegen
zeile = "Mia;18\n"
sauber = zeile.strip()
teile = sauber.split(";")
print(sauber)
print(teile)
print(teile[0])
print(int(teile[1]) + 1)
# Welche vier Zeilen erwarten Sie? Prüfen Sie nach.
try und except fangen einen Fehler ab
Wandelt int("abc") einen Text um, der keine Zahl ist, entsteht ein ValueError. Ohne Schutz hält das Programm an.
Im try-Block steht, was schiefgehen kann. Im except ValueError-Block steht, was dann geschieht. Danach läuft das Programm weiter.
Einen Fehler absichtlich auslösen
python3 -c "print(int('abc'))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele glauben, ein Programm sei sicher, wenn es jeden Fehler schluckt. Dann merkt niemand, dass Daten fehlen. Fangen Sie nur den Fehler ab, den Sie erwarten, und zählen oder melden Sie ihn.
Eine kaputte Zeile überspringen und zählen
# Drei Zeilen aus einer Punkteliste, eine davon ist kaputt.
zeilen = ["12", "abc", "30"]
summe = 0
fehler = 0
for zeile in zeilen:
try:
summe = summe + int(zeile)
except ValueError:
fehler = fehler + 1
print(summe, fehler)
# Ändern Sie "abc" in "5" und raten Sie die Ausgabe vorher.
Ein Beispiel: der Durchlauf mit einer kaputten Zeile
| Zeile | int(zeile) | summe | fehler |
|---|---|---|---|
| Start | - | 0 | 0 |
| "12" | 12 | 12 | 0 |
| "abc" | ValueError | 12 | 1 |
| "30" | 30 | 42 | 1 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Programm schreiben, das eine Datei erzeugt
printf 'with open("bericht.txt", "w") as datei:\n datei.write("Summe: 49\\n")\n' > schreiben.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Programm starten
python3 schreiben.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die erzeugte Datei ansehen
cat bericht.txtHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Weiterführend
Erweitern Sie lesen.py: Legen Sie mit printf eine Datei punkte2.txt mit den Zeilen 12, abc und 30 an. Lesen Sie sie mit dem try-Block aus dem Beispiel.
Sagen Sie voraus, was das Programm ausgibt: die Summe 42 und einen Fehler.