Error on cyclic import from package hidden in a function
还没有人认领这个 Issue。
评估
调研方向
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.
由索引模型根据 Issue 内容生成。
描述
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.
- 主要语言
- Python
- 星标
- 20.6k
- 派生
- 3.3k
- 平均合并
- 1 天 18 小时
- 30 天内合并 PR
- 54
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
python/mypy 的其他 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 75/100
-
bug
难度 2/5 1-3 小时 新手友好度 78/100
-
bug
难度 2/5 1-3 小时 新手友好度 76/100
-
documentation
难度 2/5 1-3 小时 新手友好度 72/100
-
bug topic-configuration topic-error-reporting
难度 2/5 1-3 小时 新手友好度 68/100
相似的 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 86/100
zostera/django-bootstrap4#894 ·
-
难度 2/5 1-3 小时 新手友好度 78/100
use-agent-os/agent-os#3276 ·
-
难度 2/5 1-3 小时 新手友好度 88/100
zephyrproject-rtos/zephyr#119726 ·
-
area/auth bug comp/agent P3 platform/discord type/security
难度 2/5 1-3 小时 新手友好度 88/100
NousResearch/hermes-agent#117848 ·
-
难度 2/5 1-3 小时 新手友好度 82/100
zilliztech/memsearch#759 ·