Dans ce morceau de code, pourquoi l'utilisation de for
n'ont pas pour effet de StopIteration
ou est le for
boucle piégeant toutes les exceptions et sortant ensuite silencieusement ? Dans ce cas, pourquoi avons-nous l'élément superflu return
? ? Ou est-ce que le raise StopIteration
causé par : 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)
En supposant que StopIteration
est déclenché par : return None
. Quand est-ce que GeneratorExit
généré ?
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 je fais manuellement un :
c = countdown(10)
c.close() #generates GeneratorExit??
Dans ce cas, pourquoi ne vois-je pas de traceback ?