328
Wörterbücher, Dateien und der alte Cäsar
Kapitel
12
Nun steht dieser
text
zur Bearbeitung zur Verfügung. Wir wollen ihn co-
dieren:
>>> ctext = codiere(text.lower(), caesarcode("l"))
>>> print(ctext)
otpd
tde
ptyp rlyk
vwptyp epieolept!
wtpd dtp,
dnscptm dtp,
pen. pen.
ntlz!
rw
Muster 15: Einlesen des Inhalts einer Textdatei
datei = open( dateiname, "r")
text = datei.read()
datei.close()
Aber wenn doch etwas schief läuft?
Weil zum Beispiel die Datei nicht vorhanden ist, die geöffnet werden soll?
Für solche Fälle, wo etwas schief gehen könnte, stellt Python eine besonde-
re Anweisung bereit, die
try … except
Anweisung. Quasi nach dem Mus-
ter »Probiere es … andernfalls …«:
>
Mach mit:
>>> dateiname = "C:/py4kids/kap12/probe.txt"
>>> datei = open(dateiname, "r")
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
detei = open(dateiname, "r")
IOError: [Errno 2] No such file or directory:
'C:/py4kids/kap12/probe.txt'
Dateiobjekt
datei
wird erzeugt
und zum Lesen geöffnet
Inhalt der
datei
wird als String
dem Namen
text
zugewiesen
Dateiobjekt wird geschlossen
Anschließend kann
text
verarbeitet werden
329
Dateien
Natürlich! Du weißt ja, dass die Datei probe.txt nicht existiert. Wir wollen
aber nun die Fehler-Meldung mit
try ... except ...
abfangen:
>>> try:
datei = open(dateiname, "r")
text = datei.read()
datei.close()
except:
print("{0}: Lesen misslungen!".format(dateiname))
text = ""
C:/py4kids/kap12/probe.txt: Lesen misslungen!
>>> text
''
Wie du siehst, hat diese zusammengesetzte Anweisung einen
try
-Block
und einen
except
-Block. Zuerst wird versucht, die Anweisungen im
try
-
Block auszuführen. Wenn sie fehlerfrei ablaufen, wird der
except
-Block
nicht ausgeführt. Alles läuft so, wie in der ersten, einfacheren Fassung
ohne
try
...
. except
... .
Wenn aber im
try
-Block ein Fehler auftritt, dann wird nun keine Fehler-
meldung ausgegeben, sondern der
except
-Block ausgeführt. In unserem
Fall wird mittels
print()
eine Meldung über das Problem ausgegeben und
danach
text
auf den Leerstring gesetzt. Dann haben wir zwar nichts zu
codieren, aber wenigstens ist das Programm nicht abgestürzt!
Dies ist nur ein sehr einfaches Beispiel für das Abfangen von Fehlern. Für
höhere Ansprüche gibt es in Python eine ganze Reihe von Varianten der
try
-Anweisung, mit denen man sehr gezielte Fehlerbehandlung pro-
grammieren kann. Eine genauere Beschreibung findest du in der Python-
Dokumentation: »The Python Tutorial«, Abschnitt 8.3
Handling Exceptions
.
Muster 16: Fehlerbehandlung mit try … except …
try
:
Anweisung_T1
Anweisung_T2
...
except:
Anweisung_E1
Anweisung_E2
...
try
-Block
except-
Block, wird nur im
Fall eines Fehlers ausgeführt

Get Python für Kids now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.