0
votes

Méthode d'appel lorsqu'une exception est déclenchée, plusieurs exceptions sont répertoriées après le bloc try

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 .


0 commentaires

4 Réponses :


1
votes

Vous pouvez essayer ceci

try:
   print(q)
   a = 8 / 0
except (ZeroDivisionError ,UnboundLocalError, NameError) as err:
   new_method(err)


1 commentaires

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.



1
votes

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 à.


2 commentaires

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



0
votes

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)
       ....


0 commentaires

0
votes

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


0 commentaires