考虑以下场景:
脚本.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
似乎正在发生的是:
import cant_import_this
检查是否cant_import_this
存在于sys.modules
cant_import_this
在 中找不到sys.modules
,所以cant_import_this.py
找到并加载cant_import_this
模块被放入sys.modules
cant_import_this
从sys.modules
并用其替换sys
sys.modules['cant_import_this']
将返回这个解释正确吗?更重要的是,这种行为是否记录在任何地方?它可能被认为是一个错误吗?
我在脚注中找到了答案:
importlib 实现避免直接使用返回值。相反,它通过在 sys.modules 中查找模块名称来获取模块对象。这样做的间接影响是导入的模块可能会在 sys.modules 中替换自身。这是特定于实现的行为,不能保证在其他 Python 实现中工作。
所以这不是错误,但也不能依赖。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句