【发布时间】:2012-05-10 09:28:17
【问题描述】:
我已经根据PEP 302 编写了一个导入钩子,它似乎工作正常,除了一个烦人的细节。 当出现导入错误时,例如尝试导入不存在的模块的代码,我会收到一条带有如下行的引用:
File "<string>", line 10, in helloEnv
第 10 行是对不存在的导入的调用所在的位置,但没有文件名,只有 <string>。
我的导入钩子看起来很像PEP 302 中的最小钩子。在创建模块时,我总是将正确的字符串值设置为__file__,甚至检查new_module() 是否将正确的值设置为__name__。此外,模块的str() 和repr() 都返回了一些信息。
trackback 中的这些无名文件使调试导入错误变得困难。引用从哪里获取文件名?为什么它看不到模块的名称?
编辑——再想一想,可能是因为模块代码是使用exec() 执行的。可以给exec() 一个文件名吗?
【问题讨论】:
标签: python import trackback import-hooks