好的,我对这个很难过。我环顾四周但我找不到任何东西,也无法弄清楚如何调试这个。基本上,python在一行代码中抛出ImportError
,我没有导入任何东西。我有一个体积很大的模块ICgen
,其中包含模块ICgen_settings
。
Traceback (most recent call last):
File "<ipython-input-5-105e3826f255>", line 1, in <module>
IC = ICgen.load('IC.p')
File "diskpy/ICgen/ICgen.py", line 339, in load
ICobj.settings.load(input_dict['settings'])
File "diskpy/ICgen/ICgen_settings.py", line 484, in load
tmp_dict = pickle.load(open(settings_filename, 'rb'))
ImportError: No module named ICgen_settings
这对我没有任何意义。它显然已找到ICgen_settings
,因为它从其中抛出错误。此外,当它抛出错误时,我没有进行import
调用!
有什么想法吗?
答案 0 :(得分:2)
当您尝试pickle.load
tmp_dict
时,需要加载传入数据流中任何对象的模块。
所以是的,实际上你在抛出错误时正在进行import
调用:你正在取消某种需要ICgen_settings
的某种类型的对象。注意:unpickling代码可以运行任意Python语句。永远不要破坏你不信任的物品!
现在,为什么它明确找到ICgen_settings
&#34;:不,只是在一个名为ICgen_settings.py
的文件中并不意味着该行{{ 1}}会成功。导入是否成功取决于import ICgen_settings
,sys.path
来自您的PYTHONPATH
环境变量。它还取决于ICgen_settings
的模块布局:通常,它是包含ICgen_settings
文件的__init__.py
文件夹(非文件)。