6
votes

Continuer après la levée d'exception dans Itérateur / Générateur en Python

Y a-t-il un moyen dans Python de continuer à itération après une exception jointe par itérateur / générateur? Comme dans le code ci-dessous, il y a un moyen de sauter ZerodiVisionError et de continuer à boucler via gener () code> sans modyfing exécuté () code> fonction?

def gener():
    a = [1,2,3,4,0, 5, 6,7, 8, 0, 9]
    for i in a:
        yield 2/i

def run():
    for i in gener():
        print i

#---- run script ----#

try:
    run()
except ZeroDivisionError:
    print 'what magick should i put here?'


0 commentaires

3 Réponses :


9
votes

L'endroit logique pour le Essayez / sauf serait l'endroit où le calcul incriminé a lieu: xxx


2 commentaires

Dans ce cas simple probablement oui. Mais que si nous voulons une fonction où l'itération est arrêtée par défaut, nous pouvons continuer avec l'élément suivant attraper une exception? Nous devrions avoir un signal externe que quelque chose ne va pas.


@Sergzach: Nous pourrions faire quelque chose comme donner aucun au lieu de passer et attraper ce cas particulier dans l'appelant.



2
votes

Une solution possible consiste à envelopper le code de problème en essayez ... Sauf bloc: xxx


0 commentaires

1
votes

Je ne suis pas sûr, mais peut-être que cela vous convient mieux si vous voulez toujours comprendre où les erreurs se sont produites: xxx


1 commentaires

Merci de trouver ceci. Corrigé dans EDIT @MatthewStrawwbridge