Comment empêcher "une exception trop large" dans ce cas?
J'ai une liste de fonctions qui peuvent échouer, et si l'on échoue, je ne veux pas que le script s'arrête, mais pour continuer avec la fonction suivante.
Je suis exécutant avec quelque chose comme ceci :
list_of_functions = [f_a,f_b,f_c]
for current_function in list_of_functions:
try:
current_function()
except Exception:
print(traceback.format_exc())
Ça fonctionne, mais il n'est pas PEP8 conforme:
Lors de la capture des exceptions, la mention des exceptions spécifiques à chaque
possible au lieu d'utiliser un nu à l'exception de: la clause.Par exemple, utiliser:
try: import platform_specific_module except ImportError: platform_specific_module = None
Un nu à l'exception de: clause catch SystemExit et KeyboardInterrupt
les exceptions, ce qui rend plus difficile d'interrompre un programme avec Control-C,
et peut dissimuler d'autres problèmes. Si vous voulez attraper toutes les exceptions
ce signal d'erreurs dans le programme, utiliser, sauf Exception: (nue à l'exception de est
équivalent à l'exception BaseException: ).Une bonne règle de base est de limiter l'usage de la simple 'a l'exception des" clauses de deux
cas:Si le gestionnaire d'exception sera l'impression ou l'enregistrement de la traçabilité en amont; à moins que l'utilisateur sera informé qu'une erreur s'est produite.
Si le code doit effectuer certains travaux de nettoyage, mais ensuite, permet à l'exception propagent soulever . essayez...enfin, peut-être une meilleure
façon de traiter ce cas.
Comment ce la bonne manière ?
source d'informationauteur Blusky
Vous devez vous connecter pour publier un commentaire.
La PEP8 guide vous citer nous suggère qu'il est acceptable d'utiliser un nu exception dans votre cas, à condition que vous la journalisation des erreurs. Je pense que vous devriez couvrir autant d'exceptions que vous pouvez/savez comment les traiter, puis de connecter le reste et
pass
par exempleAvez-vous peut-être dire que chaque fonction peut soulever des exceptions? Lorsque vous nommez le type d'exception dans l'exception de la clause, il peut être n'importe quel nom qui fait référence à une exception, et pas seulement le nom de la classe.
par exemple.
imprime:
Bien sûr que vous laisse avec à ne pas savoir quoi faire lors de chaque exception se produit. Mais puisque vous voulez simplement de les ignorer et de poursuivre alors ce n'est pas un problème.
//youtrack.jetbrains.com/issue/PY-9715
//legacy.python.org/dev/peps/pep-0348/
[1] http://i.stack.imgur.com/8UByz.png
//youtrack.jetbrains.com/issue/PY-9715
//legacy.python.org/dev/peps/pep-0348/