我有两个模块,main和notmain。我在主模块中声明了我的自定义异常,并想要捕获它。这个异常在非主模块中引发。问题是我无法捕捉到我在主模块中引发的异常。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
我尝试了不同的导入方法,具有相同的结果。当我运行main.py,我看到:
<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
这意味着异常莫名其妙地抓住了,但为什么我看到回溯?为什么异常类有“main.MyException”的名字?
现在,如果我修改main.py一点点并运行它:
try:
raise MyException
except MyException as e:
print(type(e))
print('ops')
我会看看有什么期望:
<class '__main__.MyException'>
ops
我不知道为什么这个类MyException有不同的main.py和notmain.py中的名称?为什么Python无法按预期抓住它?
谢谢:)
谢谢。我动态地导入模块(我只在运行时知道模块的名字),所以__import__是唯一的方法。 – demalexx 2009-11-05 15:15:02