gpt4 book ai didi

python - 意外的导入行为 : sys. 模块被检查两次?

转载 作者:太空宇宙 更新时间:2023-11-03 15:01:05 25 4
gpt4 key购买 nike

考虑以下场景:

脚本.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. sys.modules中找不到cant_import_this,因此找到并加载cant_import_this.py
  3. 未初始化的cant_import_this模块被放入sys.modules
  4. 执行该模块,从 sys.modules 中删除 cant_import_this 并将其替换为 sys
  5. 返回查找 sys.modules['cant_import_this'] 的结果,而不是返回模块本身

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

最佳答案

我在 a footnote 中找到了答案:

The importlib implementation avoids using the return value directly. Instead, it gets the module object by looking the module name up in sys.modules. The indirect effect of this is that an imported module may replace itself in sys.modules. This is implementation-specific behavior that is not guaranteed to work in other Python implementations.

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

关于python - 意外的导入行为 : sys. 模块被检查两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45102931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com