gpt4 book ai didi

python循环依赖问题: unexpected error

转载 作者:太空狗 更新时间:2023-10-30 01:30:44 28 4
gpt4 key购买 nike

我在名为“circular_dependency”的目录中有一些 python 文件:

导入文件_1.py:

from circular_dependency.import_file_2 import *

def add_one(x):
return x+1

导入文件_2.py:

from circular_dependency.import_file_1 import *

def add_two(x):
return add_one(add_one(x))

最后是 main.py

from circular_dependency.import_file_1 import *
from circular_dependency.import_file_2 import *

x = 17
print(add_two(x))

运行 main.py 会导致以下错误:

/Users/fabianwerner/anaconda3/envs/academy/bin/python /Users/fabianwerner/BI-X/academy/exercises/01_exMON_python/circular_dependency/main.py
Traceback (most recent call last):
File "/Users/fabianwerner/BI-X/academy/exercises/01_exMON_python/circular_dependency/main.py", line 5, in <module>
print(add_two(x))
File "/Users/fabianwerner/BI-X/academy/exercises/01_exMON_python/circular_dependency/import_file_2.py", line 4, in add_two
return add_one(add_one(x))
NameError: name 'add_one' is not defined

Process finished with exit code 1

据我所知,python 并不能很好地处理循环(好吧,实际上那些是无害的)“循环”依赖项。所以我本以为会出现一个错误,python 会提示我创建了循环依赖这一事实。

--> 问题:

  1. 为什么 python 不提示循环依赖?
  2. 下面的错误是什么意思?为什么 import_file_2.py 中的 add_two 函数找不到 import_file_1.py 中的 add_one 函数,尽管我已经导入了该函数?

感谢您解决这个问题 :-)

最佳答案

在这种情况下,main.py 中的导入顺序很重要。

main.py 开始,您首先导入 import_file_1。这会导致将 import_file_1 的内容加载到命名空间中。现在,作为 import_file_1.py 第一行的一部分,您导入 import_file_2,这会将 add_two() 添加到命名空间。

请注意,到目前为止,add_one() 仍未定义。当控制返回到 import_file_1 时,add_one() 最终被添加到命名空间。但是,从逻辑上讲,这发生在 引发错误的 add_two() 定义之后。

main.py 中的导入行切换为以下内容可以解决此问题:

from circular_dependency.import_file_2 import *
from circular_dependency.import_file_1 import *

关于python循环依赖问题: unexpected error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57547208/

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