Wenn Sie eine Generatorfunktion instanziieren, wird kein Code ausgeführt, bis Sie next
darauf aufrufen.
Dies bedeutet, dass wenn die Generatorfunktion irgendeinen Initialisierungscode enthält, dieser erst ausgeführt wird, wenn er iteriert wurde.
Betrachten Sie dieses Beispiel:
%Vor% Wenn die Datei nicht existiert, wird die Ausnahme bei der for-Schleife ausgelöst. Ich würde
Wie der Code vor dem ersten yield
, der ausgeführt wird, bevor der Generator iteriert wird, werden alle Ausnahmen während der Initialisierung ausgelöst
bei der Instantiierung des Generators.
Gibt es einen sauberen pythonischen Weg?
Wickeln Sie eine reguläre Funktion um den Generator und legen Sie die Initialisierung dort:
%Vor% (In diesem Fall könnten Sie den inneren Generator durch itertools.repeat
ersetzen, aber nicht generell.)
Die Funktionswrapper-Lösung funktioniert einwandfrei. Wenn Sie den gesamten Code in derselben Funktion behalten möchten, können Sie eine Schließung erstellen.
%Vor%