¿Por qué a continuación se genera una 'StopIteration', pero 'for' hace un retorno normal?
En este fragmento de código, ¿por qué el uso de 'for' no produce 'StopIteration' o el bucle 'for' atrapa todas las excepciones y luego sale silenciosamente? ¿En qué caso, por qué tenemos el 'retorno' extraño? O es elraise StopIteration
causado por:return None
?
#!/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)
AsumiendoStopIteration
está siendo activado por:return None
. ¿Cuándo se genera GeneratorExit?
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)
Si hago manualmente un:
c = countdown(10)
c.close() #generates GeneratorExit??
¿En qué caso, por qué no veo una traza?