A Byte of Python

try..finally

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.

Gebrauch von finally

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

Ausgabe

				
$ 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
				
				

So funktioniert es

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.