Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Dateien lesen und Fehler abfangen

Nach dieser Lektion: Ich kann eine Textdatei lesen und einen Fehler mit try und except abfangen.

Lektion, 60 Min.8 BefehleLab „Linux im Alltag“: die dreißig Befehle, die Entwickelnde auswendig tippen

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

BegriffWas er bedeutetBeispiel
Dateigespeicherter Text, den ein Programm lesen oder schreiben kann
withöffnet eine Datei und schließt sie am Ende von selbstwith open("punkte.txt")
Ausnahmeein Fehler, der ein Programm anhält, wenn niemand ihn abfängtValueError
try und exceptversucht etwas und fängt einen Fehler abexcept ValueError
splitteilt 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

Befehl
printf '12\n7\n30\n' > punkte.txt

Hier 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

Befehl
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

Befehl
printf 'summe = 0\nwith open("punkte.txt") as datei:\n    for zeile in datei:\n        summe = summe + int(zeile)\nprint(summe)\n' > lesen.py

Hier 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

Befehl
python3 lesen.py

Hier 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

Code: python
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

Befehl
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

Code: python
# 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

Zeileint(zeile)summefehler
Start-00
"12"12120
"abc"ValueError121
"30"30421

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Programm schreiben, das eine Datei erzeugt

Befehl
printf 'with open("bericht.txt", "w") as datei:\n    datei.write("Summe: 49\\n")\n' > schreiben.py

Hier 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

Befehl
python3 schreiben.py

Hier 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

Befehl
cat bericht.txt

Hier 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.

Über dieses Lab und seinen Quellcode: Lab „Linux im Alltag“: die dreißig Befehle, die Entwickelnde auswendig tippen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.