Ich habe zwei Module, main und notmain. Ich habe meine benutzerdefinierte Ausnahme im Hauptmodul deklariert und möchte sie abfangen. Diese Ausnahme wird im notmain-Modul ausgelöst. Das Problem ist, dass ich meine im notmain-Modul ausgelöste Ausnahme nicht abfangen kann.
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
Ich habe verschiedene Importmethoden ausprobiert, mit demselben Ergebnis. Wenn ich main.py ausführe, sehe ich dies:
<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
Das bedeutet, dass die Ausnahme irgendwie abgefangen wurde, aber warum sehe ich einen Traceback? Und warum hat die Ausnahmeklasse den Namen "main.MyException"?
Wenn ich nun main.py ein wenig modifiziere und ausführe:
try:
raise MyException
except MyException as e:
print(type(e))
print('ops')
Ich werde sehen, was erwartet wird:
<class '__main__.MyException'>
ops
Ich weiß nicht, warum diese Klasse MyException unterschiedliche Namen in main.py und in notmain.py hat? Und warum kann Python sie nicht wie erwartet abfangen?
Vielen Dank :)