簡體   English   中英

為什么這個循環導入在 Python 2 中失敗,而在 Python 3 中沒有?

[英]Why does this circular import fail in Python 2 but not in Python 3?

假設具有以下代碼內聯的包結構:

main.py

from a.b import c

a/__init__.py

a/b/__init__.py

a/b/c.py

from a.b import d

a/b/d.py

from a.b import c

python2 main.py給了我一個導入錯誤:

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from a.b import c
  File "/home/runner/a/b/c.py", line 1, in <module>
    from a.b import d
  File "/home/runner/a/b/d.py", line 1, in <module>
    from a.b import c
ImportError: cannot import name c

但是python3 main.py工作正常。 有誰知道發生了什么? 如何在 Python 2 中解決此問題? 我正在嘗試將相對導入轉換為絕對導入!

Python 2 Repl.It

Python 3 Repl.It

一個快速的解決方法是從格式中移動

from a.b import d

import a.b.d

在這里嘗試,它似乎適用於 Python 2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM