Supposons que j'utilise une bibliothèque Maintenant, il existe une autre exception, disons donc je veux vérifier alors vérifier une entrée non valide. Alors quelle exception devrais-je attraper? Bien sûr, attraper chaque exception individuelle n'est pas possible, donc j'attrape le est-ce la manière standard de le faire - attraper l'exception de base? Si oui, alors pourquoi les autres exceptions existent-elles? Pour le cas généralisé lorsque nous voulons attraper une exception spécifique? p> p> x code> qui spécifie par exemple que
exception.baseError code> est la classe de base pour toutes les exceptions de
x code>.
x.fooerror code>, lequel bien sûr hérite de
exception.baseError code> mais est plus généralisé, disons qu'il gère une entrée non valide. Supposons qu'il y ait beaucoup d'autres classes de ce type, introduisons de
baseError code> mais tous pour les cas généralisés. P>
x.baseerror code>, puis imprimez un message d'erreur. Ou je peux attraper le
x.fooerror code> spécifiquement, mais puis je manque tous les autres cas d'erreur. P>
3 Réponses :
Comme d'habitude, il y a de bons conseils dans PEP-8 , style Guide pour le code Python: P>
Lorsque vous attrapez des exceptions, mention spécifique em> exceptions chaque fois que possible em> stry> au lieu d'utiliser un
à l'exception de: code>. < / p> blockQuote>
Il y a beaucoup plus dedans là-bas, mais c'est inutile de le reproduire ici. P>
Dans ce cas, j'attraperais les détails, devais-je les gérer différemment à un
baseError code> et em> le
baseError code> pour ceux qui nécessitent Manipulation plus générale. Je m'arrêterais bien d'attraper l'exception code> intégrée code>, cependant. P>
Notez que je n'ai jamais dit un nu sauf code> clause. Je demande à la différence entre attraper le
baseError code> qui est la classe de base vs le
fooError code> qui est plus généralisé.
attraper uniquement les exceptions que vous pouvez gérer. Si vous pouvez gérer à la fois l'exception de base et l'exception dérivée, alors attrapez les deux. Mais assurez-vous d'abord de mettre l'exception dérivée d'abord, car le premier gestionnaire d'exception a trouvé que correspond à celui utilisé.
try: X.foo() except X.FooError: pass except X.BaseError: pass
Mais pourquoi attraper le dérivé du tout, lorsque la base peut tout gérer?
Parce que vous voudrez peut-être gérer l'exception dérivée de manière différente de l'exception de base.
Mais si je ne veux pas gérer l'exception spécifique d'une manière différente, utilise la classe d'exception de base d'accord?
Absolument. Toutes les exceptions à exception dérivées sont également des instances de l'exception de base.
Vous attrapez une exception spécifique en le définissant dans le remarque Vous pouvez gérer plusieurs classes d'exception en les répertoriant dans une tuple. p> p> sauf la clause code>, donc:
Merci de votre réponse, veuillez consulter mon commentaire dans la réponse de Ignacio.
@A A: Pas de problème; @Ignacio m'a battu