python exception de catch et de continuer à essayer de bloquer
Puis-je retourner à l'exécution de essayez-bloc après l'exception se produit? (Le but est d'écrire moins)
Par Exemple:
try:
do_smth1()
except:
pass
try:
do_smth2()
except:
pass
vs
try:
do_smth1()
do_smth2()
except:
??? # magic word to proceed to do_smth2() if there was exception in do_smth1
- Vous ne pouvez pas revenir à une
try
bloc une fois interrompue, non. - Je crois que non. Certains de structure à segmenter le flux, et spécifiez le point suivant à exécuter à (
do_smth2
dans cet extrait de code) . - double possible de Un Pythonic moyen pour "resume next" sur les exceptions?
- c'est vrai, j'ai googlé trop mauvais ;(
- si vous n'êtes même pas aller vérifier pour voir si do_smth1 a pris une exception ou pas... puis do_smth1 doit manger à l'exception de lui-même et de ne pas le laisser passer. mais sans doute, vous ne de soins, et ce n'est pas le droit de flux.
Vous devez vous connecter pour publier un commentaire.
Non, vous ne pouvez pas le faire. C'est juste la façon Python a sa syntaxe. Une fois que vous quittez un essai bloc à cause d'une exception, il est impossible de revenir en.
À propos d'une boucle for si?
Notez cependant qu'il est considéré comme une mauvaise pratique d'avoir un nu -
except
. Vous devez attraper d'une exception spécifique au lieu. J'ai capturé pourException
parce que c'est aussi bien que je peux le faire sans savoir de quoi exceptions près, les méthodes de pourrait lancer.Tandis que les autres réponses et de les a accepté sont correcte et doit être suivie dans le code réel, juste pour l'intégralité et de l'humour, vous pouvez essayer le
fuckitpy
( https://github.com/ajalt/fuckitpy ) module.Votre code peut être modifié à la suivante:
Puis de l'appel
myfunc()
appelleraisdo_smth2()
même si il y a une exception dansdo_smth1())
Note: s'il vous Plaît ne pas essayer dans tout le code réel, c'est un blasphème
try/except
méthodes, ou leswith fuckit:
(Lefuckit
décorateur semble plus utile que lewith fuckit:
).Vous pouvez obtenir ce que vous voulez, mais avec une syntaxe différente. Vous pouvez utiliser un "enfin" bloc après le try/except. Faire de cette façon, python va exécuter le bloc de code, quelle que soit la levée de l'exception, ou pas.
Comme ceci:
Mais, si vous voulez exécuter do_smth2() uniquement si l'exception n'était pas levée, l'utilisation d'un "autre" bloc:
Vous pouvez les mélanger trop, dans un try/except/else/clause finally.
Amusez-vous!
Vous pourriez parcourir vos méthodes...
une façon pour vous de le gérer est avec un générateur. Au lieu d'appeler la fonction, le rendement; ensuite, quelle est la consommation de la génératrice peut envoyer le résultat de l'appel de nouveau dans le générateur, ou une sentinelle si le générateur a échoué: Le trampoline qui accomplit le ci-dessus ne ressemble à:
un générateur qui serait compatible avec ce ressemblerait à ceci:
Noter que
do_many_things()
ne pas appeldo_smth*
, c'seulement les rendements, etconsume_exceptions
appels sur son nomJe ne pense pas que vous voulez faire. La façon correcte d'utiliser un
try
déclaration, en général, est aussi précisément que possible. Je pense qu'il serait mieux de le faire:En fonction de où et comment vous devez le faire, vous pourriez aussi écrire une fonction qui le fait pour vous:
Mais comme d'autres réponses ont noté, ayant une valeur null
except
est généralement un signe de quelque chose d'autre qui est erroné avec votre code."continuer", est autorisée au sein d'une "exception" ou "enfin" seulement si le bloc try est dans une boucle. 'continuer' sera la cause de la prochaine itération de la boucle pour commencer.
De sorte que vous pouvez essayer de mettre votre deux ou plusieurs fonctions dans une liste et de l'utilisation de la boucle d'appeler votre fonction.
Comme ceci:
Pour de plus amples informations vous pouvez aller sur ce lien
special_func pour éviter essayez-à l'exception de la répétition:
Exécuter du code:
De sortie ressemble à ceci:
Pour convertir des variables:
Variables ressemblerait à: