gpt4 book ai didi

python - 为什么一个 __import__ 语句会影响下一个语句的有效性?

转载 作者:太空狗 更新时间:2023-10-29 20:56:12 26 4
gpt4 key购买 nike

我正在查看一些包含两个 __import__ 语句的代码,第二个 __import__ 语句不起作用,除非第一个语句已经运行。

目录结构是这样的:

dir1
|-__init__.py
|-subdir1
| |-__init__.py
| |-file1.py
| |-file2.py
|
|-subdir2
|-__init__.py
|-file1.py
|-file2.py

代码有两个__import__语句:

m = __import__('dir1.'+subdir1, fromlist=[file1])
...
m = __import__(file2, fromlist=[class_inside_file2])

第一个有道理——大致相当于做

from dir1.subdir1 import file1

但允许动态提供子目录和文件。这是第二个声明,我不明白它为什么起作用。看起来应该相当于

from file2 import class_inside_file2

这不应该工作,因为 file2.pysubdir1 中,但我当前的工作目录比它高两级。此外,所有 __init__.py 文件都是空的。

如您所料,如果第二个 import 语句自行运行,它会失败并返回 ImportError。但是,在第一个 import 语句运行后,第二个就可以了。为什么?

最佳答案

事实证明这个解释相当愚蠢。 file1 修改sys.pathsubdir1 添加到路径中。路径上有 subdir1,显然可以直接找到 file2 而无需指定任何包。

故事的寓意 - 副作用(比如导入模块时发生的事情)是愚蠢的,因为它经常会导致看起来很奇怪并且很难诊断的问题。

关于python - 为什么一个 __import__ 语句会影响下一个语句的有效性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24275916/

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