我在名为“ circular_dependency”的目录中有一些python文件:
import_file_1.py:
from circular_dependency.import_file_2 import *
def add_one(x):
return x+1
Run Code Online (Sandbox Code Playgroud)
import_file_2.py:
from circular_dependency.import_file_1 import *
def add_two(x):
return add_one(add_one(x))
Run Code Online (Sandbox Code Playgroud)
最后是main.py
from circular_dependency.import_file_1 import *
from circular_dependency.import_file_2 import *
x = 17
print(add_two(x))
Run Code Online (Sandbox Code Playgroud)
运行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
Run Code Online (Sandbox Code Playgroud)
据我了解,python并不能很好地应对循环(嗯,实际上是无害的)“循环”依赖关系。因此,当python抱怨我已经创建了循环依赖的事实时,我会想到一个错误。
->问题:
add_twoimport_file_2.py中的函数add_one无法从import_file_1.py中找到该函数,但是我已经导入了该函数?感谢您清理此问题:-)
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 *
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |