0
votes

Comment attraper une exception dans la fonction principale, pas dans la bibliothèque importée

J'ai un fichier de script main.py qui importe une classe de lib.py , respectivement:

#lib.py
class Example:
    def __init__(self):
        self.init()

    def init(self):
        try:
            raise ValueError
        except ValueError:
            print("ValueError caught in lib.py")

et

#main.py
from lib import Example

try:
    ex = Example()
except ValueError:
    print("ValueError caught in main.py")

Quand main.py l'erreur imprimée est "ValueError caught in lib.py" , mais je voudrais que cette erreur soit interceptée dans main.py comme "ValueError caught in main.py" .

Pourquoi dans main.py le bloc except ne main.py pas l'erreur?


0 commentaires

3 Réponses :


1
votes

Vous augmentez et attrapez le ValueError dans votre fichier lib. Si vous voulez seulement que main le rattrape, supprimez le try \ sauf dans lib et laissez la relance


0 commentaires

1
votes

Les exceptions se propagent le long de la chaîne d'appels en Python. Le plus profond sauf que les correspondances seront toujours celui qui gérera l'erreur. Si vous ne voulez pas que l'erreur soit détectée dans lib.py, utilisez simplement

#lib.py
class Example:
    def __init__(self):
        self.init()

    def init(self):
       raise ValueError


0 commentaires

1
votes

Vous détectez l'exception dans la lib.py, donc l'exception s'arrête à la dernière ligne que vous avez signalée avec l'impression.

Vous avez 2 solutions:

  1. attraper deux fois l'exception pour une raison quelconque:

     def init(self):
         raise ValueError
    
  2. Capture uniquement dans le main.py

     def init(self):
         try:
             raise ValueError
         except ValueError as err:
             print("ValueError caught in lib.py")
             raise err
    


0 commentaires