意外的导入行为:sys.modules 被检查两次?

阿兰菲

考虑以下场景:

脚本.py:

import sys
import cant_import_this

print(cant_import_this)
print(cant_import_this is sys)

cant_import_this.py:

import sys
sys.modules['cant_import_this'] = sys

的输出script.py是,令人惊讶是:

<module 'sys' (built-in)>
True

似乎正在发生的是:

  1. import cant_import_this检查是否cant_import_this存在于sys.modules
  2. cant_import_this在 中找不到sys.modules,所以cant_import_this.py找到并加载
  3. 未初始化的cant_import_this模块被放入sys.modules
  4. 该模块被执行,其去除cant_import_thissys.modules并用其替换sys
  5. 而不是返回模块本身,查找的结果sys.modules['cant_import_this']将返回

这个解释正确吗?更重要的是,这种行为是否记录在任何地方?它可能被认为是一个错误吗?

阿兰菲

我在脚注中找到了答案

importlib 实现避免直接使用返回值。相反,它通过在 sys.modules 中查找模块名称来获取模块对象。这样做的间接影响是导入的模块可能会在 sys.modules 中替换自身。这是特定于实现的行为,不能保证在其他 Python 实现中工作。

所以这不是错误,但也不能依赖。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

两次导入组件

来自分类Dev

Python意外的导入行为

来自分类Dev

python模块是否被导入两次?

来自分类Dev

Bootstrap是否导入两次?

来自分类Dev

两次导入时间模块

来自分类Dev

检查 if 语句两次

来自分类Dev

意外的破坏行为,在更深层次的破坏中必须两次声明密钥

来自分类Dev

在两次检查之间检查AND OR条件

来自分类Dev

我的memcpy函数意外地两次打印src

来自分类Dev

奇怪的Python WSGI行为导致两次迭代

来自分类Dev

在Python中,使用类实例化两次导入?

来自分类Dev

两次导入一个模块会怎样?

来自分类Dev

无法导入已导出两次的类(Typescript)

来自分类Dev

Python 3中意外的导入行为

来自分类Dev

为什么使用一次的导入模块函数会被调用两次?

来自分类Dev

奇怪的导入行为

来自分类Dev

导入具有模块作为属性的对象数组在导入两次时返回 undefined

来自分类Dev

为什么我不能连续两次在sys.stdin中执行循环?(Python)

来自分类Dev

同一查询中两次更新的意外结果

来自分类Dev

对SonarQube使用Jenkins插件进行两次不同的安装,并获得新版本的意外URL

来自分类Dev

意外的:HTTP请求处理程序函数为每个请求调用两次

来自分类Dev

AJAX 调用在 Chrome 中意外运行两次

来自分类Dev

Angular.js奇怪的行为-必须单击两次按钮才能显示下拉菜单

来自分类Dev

增加在初始化列表中使用两次的变量-未定义的行为?

来自分类Dev

两次注册相同类型并仅解决单例的Unity行为

来自分类Dev

为什么这条线运行两次并且行为异常?

来自分类Dev

两次调用时jQuery offset(coords)的不连贯行为

来自分类Dev

jQuery ListView刷新两次与动态HTML行为不正常

来自分类Dev

Python中try-catch-raise异常子句的两次运行行为

Related 相关文章

  1. 1

    两次导入组件

  2. 2

    Python意外的导入行为

  3. 3

    python模块是否被导入两次?

  4. 4

    Bootstrap是否导入两次?

  5. 5

    两次导入时间模块

  6. 6

    检查 if 语句两次

  7. 7

    意外的破坏行为,在更深层次的破坏中必须两次声明密钥

  8. 8

    在两次检查之间检查AND OR条件

  9. 9

    我的memcpy函数意外地两次打印src

  10. 10

    奇怪的Python WSGI行为导致两次迭代

  11. 11

    在Python中,使用类实例化两次导入?

  12. 12

    两次导入一个模块会怎样?

  13. 13

    无法导入已导出两次的类(Typescript)

  14. 14

    Python 3中意外的导入行为

  15. 15

    为什么使用一次的导入模块函数会被调用两次?

  16. 16

    奇怪的导入行为

  17. 17

    导入具有模块作为属性的对象数组在导入两次时返回 undefined

  18. 18

    为什么我不能连续两次在sys.stdin中执行循环?(Python)

  19. 19

    同一查询中两次更新的意外结果

  20. 20

    对SonarQube使用Jenkins插件进行两次不同的安装,并获得新版本的意外URL

  21. 21

    意外的:HTTP请求处理程序函数为每个请求调用两次

  22. 22

    AJAX 调用在 Chrome 中意外运行两次

  23. 23

    Angular.js奇怪的行为-必须单击两次按钮才能显示下拉菜单

  24. 24

    增加在初始化列表中使用两次的变量-未定义的行为?

  25. 25

    两次注册相同类型并仅解决单例的Unity行为

  26. 26

    为什么这条线运行两次并且行为异常?

  27. 27

    两次调用时jQuery offset(coords)的不连贯行为

  28. 28

    jQuery ListView刷新两次与动态HTML行为不正常

  29. 29

    Python中try-catch-raise异常子句的两次运行行为

热门标签

归档