我有以下项目层次结构:
project_dir
lib
__init__.py
...
some_script.py
...
agent
__init__.py
...
errors.py
some_agent_script.py
...
lib/agent/erros.py 中有 SomeException 类定义,我使用以下代码将它们导入 lib/agent/some_agent_script.py 中:
from errors import SomeException
我也使用以下代码导入 lib/some_script.py
from agent.errors import SomeException
问题是当我在 lib/agent/some_agent_script.py 中引发 SomeException 时, lib/some_script.py 无法在 except 块中捕获它:
try:
# Here comes a call to lib/agent/some_agent_script.py function
# that raises SomeException
except SomeException, exc:
# Never goes here
print(exc)
except Exception, exc:
print(exc.__class__.__name__) # prints "SomeException"
# Let's print id's
print(id(exc.__class__))
print(id(SomeException))
# They are different!
# Let's print modules list
pprint.pprint(sys.modules)
我可以在 sys.modules 中看到错误模块被导入了两次:第一次是使用“agent.errors”键,第二次是使用“lib.agent.errors”键
下面的代码是正确的,但它不是一个漂亮的解决方案:
agent_errors = sys.modules.get('agent.errors')
from agent_errors import SomeException
try:
# Here comes a call to lib/agent/some_agent_script.py function
except SomeException:
print('OK')
我应该怎么做才能使这个模块不导入两次?