dem*_*exx 3 python exception-handling exception
我有两个模块,main和notmain.我在主模块中声明了我的自定义异常,并希望捕获它.在非主模块中引发此异常.问题是我无法捕获在notmain模块中引发的异常.
main.py:
class MyException(Exception):
pass
m = __import__('notmain')
try:
m.func()
except MyException as e:
print(type(e))
print('ops')
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的导入方法,结果相同.当我运行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
Run Code Online (Sandbox Code Playgroud)
这意味着异常以某种方式被捕获,但为什么我看到追溯?为什么异常类有"main.MyException"的名字?
现在,如果我稍微修改main.py并运行它:
try:
raise MyException
except MyException as e:
print(type(e))
print('ops')
Run Code Online (Sandbox Code Playgroud)
我会看到预期的结果:
<class '__main__.MyException'>
ops
Run Code Online (Sandbox Code Playgroud)
我不知道为什么这个类MyException在main.py和notmain.py中有不同的名字?为什么Python无法按预期捕获它?
谢谢 :)
| 归档时间: |
|
| 查看次数: |
4045 次 |
| 最近记录: |