Python - Generator-Fall, bei dem nichts zurückgegeben wird

8

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?

    
whats canasta 18.07.2013, 01:41
quelle

3 Antworten

8

Mach einfach einen einfachen Check:

%Vor%     
Wolph 18.07.2013, 01:47
quelle
3

Überprüfen Sie vor dem Iterieren:

%Vor%     
Óscar López 18.07.2013 01:45
quelle
2

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

Ist Iteration über Generator ein Problem?

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:

    %Vor%
  • 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%

Ist die Iteration in Generator ein Problem?

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 .

Lösung

Um dieses Problem zu beheben, entweder:

  • garantieren, dass self.my_objects immer iterierbar ist (zB leere Liste [] ), oder
  • überprüfe es vor der Iteration:

    %Vor%
Tadeck 18.07.2013 02:03
quelle

Tags und Links