gpt4 book ai didi

python循环导入错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:49:43 27 4
gpt4 key购买 nike

结构如下:

bin.py
package/
__init__.py
a.py
b.py

bin.py的内容:

#!/usr/bin/python
import package

__init__.py 的内容:

import a

a.py的内容:

print "a >> begin"
print "a >> import b"
import b
print "a << import b"

def Print():
print b.var

print "a << end"

b.py的内容:

print "  b >> begin"
print " b >> import a"
import a
print " b << import a"

var = 3
a.Print()

print " b << end"

如果我运行 python './package/a.py' - 一切正常。

./package/a.py
a >> begin
a >> import b
b >> begin
b >> import a
a >> begin
a >> import b
a << import b
a << end
b << import a
3
b << end
a << import b
a << end

如果我运行 python './bin.py',我会发现错误。

./bin.py
a >> begin
a >> import b
b >> begin
b >> import a
b << import a
Traceback (most recent call last):
File "./bin.py", line 2, in <module>
import package
File "/home/fervid/Projects/AutoClassification-Python/package/__init__.py", line 1, in <module>
import a
File "/home/fervid/Projects/AutoClassification-Python/package/a.py", line 3, in <module>
import b
File "/home/fervid/Projects/AutoClassification-Python/package/b.py", line 7, in <module>
a.Print()
AttributeError: 'module' object has no attribute 'Print'

有什么区别?

最佳答案

当你运行/import a.py之前 b.py :

a >> begin
a >> import b
b >> begin
b >> import a
a >> begin
a >> import b
a << import b # see here?
a << end
b << import a
3
b << end
a << import b
a << end

第二次调用 import b发现已经有一个b已加载(尽管此时它只是中途),因此返回到 a完成那个import .因此当它返回完成加载时 b , a.Print已定义。


但是,当您运行/import b.py之前 a.py :

  b >> begin
b >> import a
a >> begin
a >> import b
b >> begin
b >> import a
b << import a # oh dear

Traceback (most recent call last):
File "C:\Python27\so\package\b.py", line 3, in <module>
import a
File "C:\Python27\so\package\a.py", line 3, in <module>
import b
File "C:\Python27\so\package\b.py", line 7, in <module>
a.Print()
AttributeError: 'module' object has no attribute 'Print'

a import b 时开始导入开始,但是 a.Print尚未定义(我们还没有达到 a << import b ,更不用说 a << end 了)。然而,作为 b以前没有开始导入,它会尝试加载所有 b之前 a已经完成了。

关于python循环导入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30847831/

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