Ich habe einen Generator wie folgt:
%Vor%Was ich so nenne:
%Vor%Wenn nichts zurückgegeben werden soll, wird versucht, über NoneType zu iterieren und eine Ausnahme auszulösen.
Wie gebe ich stattdessen einen leeren Generator zurück?
Es ist wichtig zu wissen, welche Iteration den Fehler verursacht. Dies ist sicherlich in traceback gezeigt, aber in diesem Fall ist Traceback nicht notwendig (weiterlesen).
Nachdem Sie sich das angesehen haben, ist es offensichtlich, aber es lohnt sich, dies zu verdeutlichen:
Der leere Generator ist nicht von NoneType
, so dass das Iterieren nicht zu folgendem Problem führt:
Generator wird von Python während der Definition erkannt (ich vereinfache) und der Versuch, Generatoren und einfache Funktionen zu mischen (zB durch Verwendung von bedingten, wie unten) ist ein Syntaxfehler:
%Vor%Basierend auf dem oben Gesagten ist die Schlussfolgerung, dass der Fehler nicht darin besteht, Iterator zu durchlaufen, sondern was passiert, wenn es erzeugt wird (der Code innerhalb des Generators):
%Vor% Scheinbar wird self.my_objects
in einigen Fällen None
.
Um dieses Problem zu beheben, entweder:
self.my_objects
immer iterierbar ist (zB leere Liste []
), oder überprüfe es vor der Iteration:
%Vor%