In diesem Codeabschnitt führt die Verwendung von 'for' zu keinem 'StopIteration' oder ist die For-Schleife für alle Ausnahmen zuständig und wird dann automatisch beendet? In diesem Fall, warum haben wir die äußere "Rückkehr" ?? Oder ist die raise StopIteration
verursacht durch: return None
? return None
:Warum wird als nächstes eine 'StopIteration' ausgelöst, aber 'für' eine normale Rückkehr?
#!/usr/bin/python3.1
def countdown(n):
print("counting down")
while n >= 9:
yield n
n -= 1
return
for x in countdown(10):
print(x)
c = countdown(10)
next(c)
next(c)
next(c)
Unter der Annahme, StopIteration
wird durch ausgelöst. Wann wird GeneratorExit generiert?
def countdown(n):
print("Counting down from %d" % n)
try:
while n > 0:
yield n
n = n - 1
except GeneratorExit:
print("Only made it to %d" % n)
Wenn ich manuell ein tun:
c = countdown(10)
c.close() #generates GeneratorExit??
In diesem Fall, warum ich kein Zurückverfolgungs sehen?
Beachten Sie auch, für nur die Ausnahme beim Auswerten des Iterators zu fangen. Es fängt es nicht ein, wenn es innerhalb des Körpers der for-Schleife angehoben wird. –
@JonasWielicki: erweiterte den Satz etwas, um diese Interpretation zu entfernen. :-) –