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()