Mein Verständnis von Pythons with
Anweisung lautet wie folgt:
with
statement = with
+ ausdruck + as
+ ziel + :
+ anzug
__enter__
gibt einen Wert an target zurück
__exit__
des Kontextmanagers wird aufgerufen Ich weiß, Ausnahmen können in Schritt 2 und Schritt 3 behandelt werden, meine Frage ist, dass, wenn eine Ausnahme während des Schritts1 ausgelöst wird, wenn Ausdruck ausgeführt wird, kann ich einen Kontextmanager bekommen?
Wenn nicht, bedeutet das, dass die Anweisung with
nur sicherstellt, dass suit ausgeführt wird und ordnungsgemäß schließt?
Wie with open("file") as f
, wenn die Datei nicht existiert, was wird passieren?
Die with
-Anweisung verwaltet nur Ausnahmen in Schritt 3 . Wenn in Schritt 1 eine Exception ausgelöst wird (Ausführen von expression ) oder in Schritt 2 (Ausführen der Methode context manager __enter__
), haben Sie keinen (gültigen und funktionierenden) Kontextmanager , um die Ausnahme an zu übergeben.
Wenn also die Datei nicht existiert, wird eine Ausnahme ausgelöst, die von einem Kontextmanager nicht bearbeitet werden kann, da dieser Kontextmanager nie erstellt wurde.
Wenn das ein Problem ist, können Sie den Ausdruck Teil immer separat ausführen:
%Vor%Tags und Links python with-statement contextmanager