Seite 1 von 1
Generator stoppen...
Verfasst: Freitag 1. Juli 2011, 15:55
von mutetella
Hallo,
ich bin mir nicht sicher, ob es für folgendes nicht eine bessere Lösung gibt:
Code: Alles auswählen
def gen(start=None):
if start is None:
raise StopIteration('No start no trip!')
for trip in ['Paris', 'London', 'Bruessel', 'Heimertingen'][start:]:
yield trip
mutetella
Re: Generator stoppen...
Verfasst: Freitag 1. Juli 2011, 16:19
von Dauerbaustelle
Du kannst auch einfach `return` statt dem `StopIteration` nutzen.
Re: Generator stoppen...
Verfasst: Freitag 1. Juli 2011, 16:36
von mutetella
@Dauerbaustelle:
'return' in einem Generator geht nicht. Eben für das Funktions-'return' suche ich eine Alternative im Generator um diesen zu verlassen, wenn z. B. die Bedingungen für eine Schleife nicht gegeben sind...
Re: Generator stoppen...
Verfasst: Freitag 1. Juli 2011, 16:43
von DasIch
Re: Generator stoppen...
Verfasst: Freitag 1. Juli 2011, 16:52
von derdon
mutetella hat geschrieben:@Dauerbaustelle:
'return' in einem Generator geht nicht.
Es kommt darauf an, ob return ein Argument bekommt oder nicht:
Code: Alles auswählen
>>> def gen(start=None):
... if start is None:
... return
... for trip in ['Paris', 'London', 'Bruessel', 'Heimertingen'][start:]:
... yield trip
...
...
>>> x = gen()
>>> x.next()
Traceback (most recent call last):
File "<input>", line 1, in <module>
StopIteration
>>> def gen2():
... if 2 < 5:
... return 38
... else:
... yield 42
SyntaxError: 'return' with argument inside generator (<input>, line 6)
Ich finde die Lösung von DasIch am einfachsten lesbar. Ist natürlich die Frage, ob du eine Fehlermeldung oder einfach nur StopIteration bei start=None haben willst.
Re: Generator stoppen...
Verfasst: Freitag 1. Juli 2011, 19:06
von mutetella
derdon hat geschrieben:Es kommt darauf an, ob return ein Argument bekommt oder nicht
Ok, das wusste ich nicht (weil ich die Fehlermeldung nicht ordentlich gelesen hab'...).
derdon hat geschrieben:Ich finde die Lösung von DasIch am einfachsten lesbar. Ist natürlich die Frage, ob du eine Fehlermeldung oder einfach nur StopIteration bei start=None haben willst.
Werde ich dann auch so machen. Ich wollte halt nicht den gesamten Anweisungsblock unter eine if-Bedingung stellen sondern schon vorher aussteigen. Aber letztlich ist das wohl die einfachste Möglichkeit...
mutetella