J'ai deux modules, principal et notmain. J'ai déclaré mon exception personnalisée dans le module principal et je veux l'attraper. Cette exception est levée dans le module notmain. Le problème est que je ne peux pas attraper mon exception soulevée dans le module notmain.Gestion des exceptions personnalisées en Python
main.py:
class MyException(Exception):
pass
m = __import__('notmain')
try:
m.func()
except MyException as e:
print(type(e))
print('ops')
notmain.py:
def func():
import main # 1
# from main import MyException # 2
# from main import MyException as MyException # 3
raise main.MyException # 1
# raise MyException # 2, 3
J'ai essayé différentes méthodes d'importation, avec le même résultat. Quand je lance main.py, je vois ceci:
<class 'main.MyException'>
ops
Traceback (most recent call last):
File "D:\exception\main.py", line 6, in <module>
m.func()
File "D:\exception\notmain.py", line 6, in func
raise main.MyException # 1
main.MyException
Cela signifie exception est en quelque sorte pris, mais pourquoi je vois retraçage? Et pourquoi la classe d'exception a le nom "main.MyException"?
Maintenant, si je modifie main.py un peu et l'exécuter:
try:
raise MyException
except MyException as e:
print(type(e))
print('ops')
Je vais voir ce que l'on attend:
<class '__main__.MyException'>
ops
Je ne sais pas pourquoi cette MyException classe a différentes noms dans main.py et dans notmain.py? Et pourquoi Python ne peut pas l'attraper comme prévu?
Merci :)
Merci. J'importe les modules dynamiquement (je ne connais que le nom du module en cours d'exécution), donc __import__ est le seul moyen de le faire. – demalexx