【发布时间】:2018-08-06 01:02:51
【问题描述】:
我有一个 Python 项目,结构如下
src/
__init__.py
m/
__init__.py
a.py
b.py
src/m/__init__.py的内容是
exec_str = 'A = type("A", (object,), {"x": 1})'
src/m/a.py的内容是
from src.m import exec_str
exec(exec_str)
src/m/b.py的内容是
from src.m.a import A
当我针对这段代码运行 mypy 时,我得到了
错误:模块“src.m.a”没有属性“A”
我不确定是否有办法让 mypy 识别这个模块。我知道我正在动态创建和导入一个类型,所以我不一定希望 mypy 在这里工作,但我也不知道如何让 mypy 忽略它。我尝试添加# type: ignore,但mypy 说misplaced type annotation。
此时,我根本无法让mypy 成功通过。我能做些什么来解决这个问题?
我还应该说,如果可能的话,我真的不想忽略所有 b.py。那里(实际上)有相当数量的代码可以很好地进行类型检查。
【问题讨论】:
-
我猜创建存根文件 (
src/m/a.pyi) 是不可能的? -
@mgilson 不幸的是,是的。我正在创建的类型集是dynamic,因此在存根文件中枚举它们会破坏目的。
标签: python types mypy type-annotation