Error on cyclic import from package hidden in a function
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Start by running the reproducer linked in the issue with the shown mypy command, then inspect how package/a.py, package/b.py, and package/init.py are analyzed for cyclic imports and deferred function imports. Compare the package import with the direct package.b import; done means the valid package form no longer produces the reported attribute and undefined-name errors.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
I think that mypy incorrectly reports an error. Full steps to reproduce are at https://github.com/lopuhin/mypy-lang-issue-1, but basically, the issue is this: say we have a package package:
package
├── __init__.py
├── a.py
├── b.py
└── test.py
package/a.py has a class that has an import hidden in a function:
class A(object):
def do(self):
from package import do_b # this gives an error
# from package.b import do_b # this works
return do_b(self)
package/b.py defines that do_b function and has an import from package.a in order to have a valid type declaration:
from package.a import A
def do_b(a):
# type: (A) -> str
return 'foo'
package/__init__.py exports do_b from b:
from .b import do_b
And package/test.py is just to check that there is no error on the python level:
from package.a import A
a = A()
print(a.do())
Now, the command mypy --silent-imports --check-untyped-defs package gives the following error:
package/a.py: note: In function "do":
package/a.py:3: error: Module 'package' has no attribute 'do_b'
package/a.py:5: error: Name 'do_b' is not defined
But if we import from package.b directly in package/a.py, the error goes away.
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Merge medio
- 1g 18h
- PR unite (30g)
- 54
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di python/mypy
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
bug topic-configuration topic-error-reporting
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
zostera/django-bootstrap4#894 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
use-agent-os/agent-os#3276 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
zephyrproject-rtos/zephyr#119726 ·
-
area/auth bug comp/agent P3 platform/discord type/security
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
NousResearch/hermes-agent#117848 ·