Salut, j'ai du code où, après le bloc d'essai, il y a plusieurs blocs d'exception, je veux appeler une méthode spécifique lorsque l'une des exceptions se produit. Je ne veux pas appeler ma méthode dans chaque exception.
voici mon exemple de code
try: print(q) a = 8 / 0 except ZeroDivisionError as z_err: new_method(z_err) # it's logger operation except UnboundLocalError as ub_err: new_method(ub_err) # it's logger operation except NameError as err: new_method(err) # no log operation. except customException1 as err: new_method(err) # log 2 method
essentiellement ma méthode nécessitait l'exception comme argument. également dans certaines exceptions, un type spécifique d'opération de journal que je dois effectuer. toutes les exceptions n'ont pas d'opération de journalisation.
Je ne veux pas appeler cette méthode dans chaque exception car j'ai plus de 10 exceptions répertoriées.
si quelqu'un a des solutions, veuillez partager .
4 Réponses :
Vous pouvez essayer ceci
try: print(q) a = 8 / 0 except (ZeroDivisionError ,UnboundLocalError, NameError) as err: new_method(err)
merci pour votre réponse, c'est correct, mais je veux une solution un peu plus précise. car il y a une exception dans laquelle je dois effectuer des opérations de journalisation. pas dans toutes les opérations de journalisation d'exceptions est effectuée.
Si vous souhaitez traiter toutes les exceptions de la même manière, vous pouvez n’en utiliser qu’un sauf bloc, à savoir:
try: <your code here> except (ValueError, TypeError, ZeroDivisionError) as e: new_method(e)
Cependant, il est préférable de gérer les exceptions individuellement ou selon vos besoins, vous pouvez également utiliser un tuple d'exceptions
dans votre bloc except. Par exemple,
try: <your code here> except Exception as e: new_method(e)
Je vois, donc vous pouvez créer un tuple pour toutes les exceptions pour lesquelles vous devez vous connecter et un autre tuple pour les exceptions dont vous n'avez pas besoin à.
merci, mais je dois effectuer une opération de journalisation supplémentaire dans une exception spécifique, pas dans toutes les exceptions.
@SagarT J'ai ajouté un commentaire dans ma réponse. Je suppose que c'est le mieux que vous puissiez faire. Je ne sais pas trop quoi faire d'autre
Vous pouvez classer les exceptions dans la condition except comme ceci
try: print(q) a = 8 / 0 except error as err: if err is abc: new_method(err) elif err is xyz: new_method2(err) ....
après de nombreuses discussions et après avoir passé en revue les réponses données à ma question, j'ai trouvé la solution ci-dessous.
err_mesg = None try: print(q) a = 8 / 0 except (ZeroDivisionError, UnboundLocalError) as z_err: err_msg = z_err # it's logger operation except (NameError, customException1, customException2) as err: err_msg = err # no log operation. except (customException3, customException4) as err: err_msg = err # logger second operation if err_msg: new_method(err_msg)
c'est le meilleur résultat possible pour mon problème. selon mes recherches merci @Abhijith Asokan et @Soma Siddhartha