Kontextmanagement mit with
#
Eine rationellere Art, das Muster try-except-finally
zu kapseln, ist die
Verwendung des Schlüsselworts with
und eines Kontextmanagers. Python
definiert Kontextmanager für Dinge wie den Zugriff auf Dateien und
eigene Kontextmanager. Ein Vorteil von Kontextmanagern ist, dass sie
standardmäßige Bereinigungsaktionen definieren können, die immer ausgeführt
werden, unabhängig davon, ob eine Ausnahme auftritt oder nicht.
Die folgende Auflistung zeigt das Öffnen und Lesen einer Datei unter Verwendung
von with
und einem Kontextmanager.
1filename = "myFile1.py"
2with open(filename, "r") as f:
3 for line in f:
4 print(line)
Hier wird ein Kontextmanager eingerichtet, der die Funktion open
und den
darauf folgenden Block umschließt. Die vordefinierte Aufräumaktion des
Kontextmanagers schließt die Datei, auch wenn eine Ausnahme auftritt. Solange
der Ausdruck in der ersten Zeile ausgeführt wird, ohne eine Ausnahme
auszulösen, wird die Datei immer geschlossen. Dieser Code ist äquivalent zu
diesem Code:
1filename = "myfile1.py"
2try:
3 f = open(filename, "r")
4 for line in f:
5 print(f)
6except Exception as e:
7 raise e
8finally:
9 f.close()