Jul*_*ian 23 python exception-handling importerror
当一个foo人在源目录中尝试导入模块时,会得到一个相当混乱的ImportError消息:ImportError: No module named foo.
如何轻松捕获此案例并返回更多信息,例如"请不要从源目录加载模块foo"?
有了__init__.py,我会开始:
try:
from _foo import *
except ImportError:
## check whether in the source directory...
Run Code Online (Sandbox Code Playgroud)
所以我想区分a的不同原因ImportError(例如,因为一个名为的模块foo根本没有安装),并检测它setup.py位于当前目录中的情况.这样做的优雅方式是什么?
ise*_*dev 31
ImportError: No module named foo实际上意味着在搜索路径(列表)中的任何目录中都找不到模块foo.py或包.foo/__init__.pysys.path
由于sys.path通常包含.(当前目录),这可能是您在源目录中的含义.您位于包的顶级目录foo(__init__.py文件所在的位置),所以显然您无法找到foo/__init__.py.
最后,您或多或少地回答了您自己的问题:
try:
from _foo import *
except ImportError:
raise ImportError('<any message you want here>')
Run Code Online (Sandbox Code Playgroud)
或者,您可以检查sys.path当前目录的内容,如果已知,还可以检查预期的包目录,并生成详细的上下文消息.
或者添加..到PYTHONPATH环境变量(在Unix上)以允许您从源目录运行.甚至可能在Windows上工作,但我不知道.