Existe-t-il un moyen d'empêcher les exceptions StopIteration
d'être rejetées à partir d'un code indépendant (sans avoir à les attraper manuellement)?Comment éviter que StopIteration ne soit intercepté?
Exemple: loop_all
veut parcourir en boucle l'itérateur myiter
et passer simplement à la fin de celui-ci. Cela fonctionne à moins que some_dangerous_method
ou tout autre code dans myiter
déclenche un StopIteration
.
def loop_all():
myiter = myiter()
try:
while True:
next(myiter) # <- I want exactly the StopIteration from this next method
except StopIteration:
pass
def myiter():
some_dangerous_method() # what if this also raises a StopIteration?
for i in some_other_iter():
# here may be more code
yield
est-il un moyen de faire comprendre à qui StopIteration
le code devrait réagir?
Pourquoi pensez-vous que vous aurez jamais obtenir un 'StopIteration' d'ailleurs? C'est comme si vous attendiez un appel stdlib aléatoire, comme l'échec de l'heure actuelle ou d'un nombre aléatoire ... – ThiefMaster
Ceci est un exemple concret, mais il est vrai que je n'avais jamais pensé à ce genre de chose. – Debilski
En outre, il existe plusieurs méthodes qui appellent le code tiers. Je ne veux pas faire un crochet à moins qu'il n'y ait vraiment, vraiment pas d'autre moyen. – Debilski