gpt4 book ai didi

python - 为什么循环导入似乎在调用堆栈中更靠前,但在更靠下的位置引发 ImportError?

转载 作者:IT老高 更新时间:2023-10-28 21:11:10 26 4
gpt4 key购买 nike

我收到了这个错误

Traceback (most recent call last):
File "/Users/alex/dev/runswift/utils/sim2014/simulator.py", line 3, in <module>
from world import World
File "/Users/alex/dev/runswift/utils/sim2014/world.py", line 2, in <module>
from entities.field import Field
File "/Users/alex/dev/runswift/utils/sim2014/entities/field.py", line 2, in <module>
from entities.goal import Goal
File "/Users/alex/dev/runswift/utils/sim2014/entities/goal.py", line 2, in <module>
from entities.post import Post
File "/Users/alex/dev/runswift/utils/sim2014/entities/post.py", line 4, in <module>
from physics import PostBody
File "/Users/alex/dev/runswift/utils/sim2014/physics.py", line 21, in <module>
from entities.post import Post
ImportError: cannot import name Post

你可以看到我进一步使用相同的导入语句并且它有效。循环进口有什么不成文的规定吗?如何在调用堆栈的下方使用相同的类?


另见What happens when using mutual or circular (cyclic) imports in Python?有关允许的内容以及导致 WRT 循环导入问题的原因的一般概述。见 What can I do about "ImportError: Cannot import name X" or "AttributeError: ... (most likely due to a circular import)"?用于解决和避免循环依赖的技术。

最佳答案

我认为 answer by jpmc26 ,虽然绝不是,但对循环导入的影响太大了。如果您正确设置它们,它们可以正常工作。

最简单的方法是使用 import my_module 语法,而不是 from my_module import some_object。前者几乎总是有效,即使 my_module 包含导入我们回来。后者仅适用于 my_object 已在 my_module 中定义的情况,而循环导入可能并非如此。

具体到您的情况:尝试更改 entities/post.py 以执行 import Physics 然后引用 physics.PostBody 而不是而不仅仅是 PostBody 直接。同样,将 physics.py 更改为 importentities.post 然后使用 entities.post.Post 而不仅仅是 Post.

关于python - 为什么循环导入似乎在调用堆栈中更靠前,但在更靠下的位置引发 ImportError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22187279/

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