ich folgende Projekthierarchie haben:Importieren von Bibliotheksklassen in Python
project_dir
lib
__init__.py
...
some_script.py
...
agent
__init__.py
...
errors.py
some_agent_script.py
...
Es ist die SomeException Klassendefinition in lib/Mittel/erros.py ich folgenden Code verwenden sie innerhalb lib/Mittel/some_agent_script zu importieren. py:
from errors import SomeException
auch Code, den ich verwende folgende in lib zu importieren/some_script.py
from agent.errors import SomeException
Das Problem ist, wenn ich ein SomeException in lib/Mittel/some_agent_script.py dann lib/some_script.py anheben kann es nicht in einer außer Block fangen:
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)
I in sys.modules sehen kann, das Modul erros zweimal importiert wurde: die erste mit ‚agent.errors‘ Schlüssel und der zweite ist mit ‚lib.agent.errors‘ Schlüssel
der folgende Code geht in Ordnung, aber es ist keine schöne Lösung:
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')
Was muss ich tun, damit dieses Modul nicht zweimal importiert wird?
Was Python-Version ist es? –
Es ist Python 2.6.6 – fey
Verwandte lesen: [Frage SO] (http://stackoverflow.com/questions/1459236/module-relimported-if-imported-from-different-path), [PEP 395] (http://www.python.org/dev/peps/pep-0395/) –