[Python-ideas] ImportError raised for a circular import

Chris Angelico rosuav at gmail.com
Tue Jun 13 18:36:08 EDT 2017


On Wed, Jun 14, 2017 at 8:10 AM, Mahmoud Hashemi <mahmoud at hatnote.com> wrote:
> I didn't interpret the initial email as wanting an error on *all* circular
> imports. Merely those which are unresolvable. I've definitely helped people
> diagnose circular imports and wished there was an error that called that out
> programmatically, even if it's just a string admonition to check for
> circular imports, appended to the ImportError message.

Oh! That could be interesting. How about a traceback in the import chain?

# a.py
import b
q = 1

# b.py
import c

# c.py
from a import q

c.py will trigger an ImportError, but that could say something like... oh look:

$ python3 a.py
Traceback (most recent call last):
  File "a.py", line 1, in <module>
    import b
  File "/home/rosuav/tmp/asdf/b.py", line 1, in <module>
    import c
  File "/home/rosuav/tmp/asdf/c.py", line 1, in <module>
    from a import q
ImportError: cannot import name 'q' from 'a' (/home/rosuav/tmp/asdf/a.py)

Already happens :)

A bit harder, but also possible, would be to have an AttributeError on
a module recognize that an import is happening, and report a possible
circular import. That'd take some engineering, but it would be
helpful. That'd catch cases like:

# c.py
import a
print(a.q)

Is that what you're looking for?

ChrisA


More information about the Python-ideas mailing list