Wie in der Dokumentation die finally
Klausel ist dazu gedacht, Aufräumaktionen zu definieren, die ausgeführt werden müssen unter allen Umständen .
Si finally
vorhanden ist, gibt es einen "Aufräum-Handler" an. Die Website try
Klausel ausgeführt wird, einschließlich aller except
y else
Klauseln. Wenn eine Ausnahme in einer der Klauseln auftritt und nicht behandelt wird, wird die wird die Ausnahme vorübergehend gespeichert. Die finally
Klausel ausgeführt wird. Wenn eine gespeicherte Ausnahme auftritt, wird sie am Ende der finally
Klausel.
Ein Beispiel:
>>> def divide(x, y):
... try:
... result = x / y
... except ZeroDivisionError:
... print("division by zero!")
... else:
... print("result is", result)
... finally:
... print("executing finally clause")
...
>>> divide(2, 1)
result is 2.0
executing finally clause
>>> divide(2, 0)
division by zero!
executing finally clause
>>> divide("2", "1")
executing finally clause
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in divide
TypeError: unsupported operand type(s) for /: 'str' and 'str'
Wie Sie sehen können, ist die finally
Klausel wird in jedem Fall ausgeführt. Die TypeError
die durch die Teilung zweier Zeichenketten entsteht, wird nicht von der except
Klausel und erhöhte daher erneut nach der finally
Klausel ausgeführt worden ist.
In realen Anwendungen ist die finally-Klausel nützlich, um externe Ressourcen (wie Dateien oder Netzwerkverbindungen) freizugeben, unabhängig davon, ob die Nutzung der Ressource erfolgreich war.