【问题标题】:Python import hooks: no filenames in trackback of import errorsPython导入钩子:导入错误的引用中没有文件名
【发布时间】:2012-05-10 09:28:17
【问题描述】:

我已经根据PEP 302 编写了一个导入钩子,它似乎工作正常,除了一个烦人的细节。 当出现导入错误时,例如尝试导入不存在的模块的代码,我会收到一条带有如下行的引用:

File "<string>", line 10, in helloEnv

第 10 行是对不存在的导入的调用所在的位置,但没有文件名,只有 &lt;string&gt;
我的导入钩子看起来很像PEP 302 中的最小钩子。在创建模块时,我总是将正确的字符串值设置为__file__,甚至检查new_module() 是否将正确的值设置为__name__。此外,模块的str()repr() 都返回了一些信息。

trackback 中的这些无名文件使调试导入错误变得困难。引用从哪里获取文件名?为什么它看不到模块的名称?


编辑——再想一想,可能是因为模块代码是使用exec() 执行的。可以给exec() 一个文件名吗?

【问题讨论】:

    标签: python import trackback import-hooks


    【解决方案1】:

    好的,这很简单。而不是

    exec(code, mod.__dict__)
    

    写:

    exec(compile(code, fullname, "exec"), mod.__dict__)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      • 2018-02-03
      • 2016-07-23
      • 1970-01-01
      • 2014-01-29
      相关资源
      最近更新 更多