Wie würden Sie vorgehen, wenn Sie eine Datei lesen, und diese Datei danach schließen
wollen, unabhängig davon, ob eine Ausnahme ausgelöst wurde oder nicht? Dies kann
mit Hilfe eines finally
-Blocks erreicht werden. Beachten Sie jedoch,
dass Sie keine except
-Klausel zusammen
mit einem finally
-Block für den gleichen zugehörigen
try
-Block benutzen dürfen. Wenn Sie beide zusammen benutzen wollen,
dann müssen Sie einen von beiden Blöcken in den anderen verschachteln.
Beispiel 13.3. Gebrauch von finally (finally.py)
#!/usr/bin/python import time try: f = file('gedicht.txt') while True: # unsere uebliche Weise, Dateien zu lesen zeile = f.readline() if len(zeile) == 0: break time.sleep(2) print zeile, finally: f.close() print 'Raeume auf... Datei geschlossen.'
$ python finally.py Programmieren mit Elan und die Arbeit wird getan, Raeume auf... Datei geschlossen. Traceback (most recent call last): File "finally.py", line 12, in ? time.sleep(2) KeyboardInterrupt
Wir lesen die Datei wieder auf die übliche Weise ein, aber ich habe absichtlich
eine Pause von 2 Sekunden eingebaut, bevor jede Zeile ausgegeben wird, indem ich
die Methode time.sleep
benutzt habe. Der einzige Grund,
warum ich das getan habe, ist, damit das Programm langsam abläuft (Python ist von
Natur aus sehr schnell). Während das Programm noch läuft, drücken Sie
Strg+c,
um das Programm zu unterbrechen und zu beenden.
Beachten Sie, dass eine KeyboardInterrupt
-Ausnahme
ausgelöst wird und das Programm abbricht, jedoch vor dem Programmabbruch noch
die finally
-Klausel ausführt und die Datei schließt.