mypy能否输出文件中所有类型信息?IDE集成场景下如何实现?
获取mypy中文件的所有类型信息(批量替代
reveal_type()) mypy支持批量获取文件中所有元素的类型信息,不需要手动给每个变量添加reveal_type(),以下是两种实用方法:
1. 生成JSON类型报告(最简便)
直接通过mypy的命令行参数生成结构化的类型报告,解析报告即可提取所有变量、函数、类的类型信息:
- 运行命令:
mypy --json-report <输出目录路径> <你的Python文件路径> - 执行后,指定的输出目录会生成多个JSON文件:
report.json:汇总整个项目的类型检查结果;- 每个目标文件对应一个单独的JSON文件(比如
your_file.py.json),其中包含该文件内所有符号(变量、函数、类等)的详细类型信息,包括位置、推断类型、注解类型等。
- 你可以编写简单的脚本解析这些JSON,提取需要的变量-类型映射,效果等同于对所有元素执行
reveal_type()。
2. 调用mypy内部API(定制化需求)
如果需要更灵活的类型提取逻辑,可以直接调用mypy的内部语义分析API,遍历文件的符号表获取类型:
- 示例脚本(需安装mypy):
from mypy.build import build from mypy.config import Options from mypy.nodes import Var, FuncDef, ClassDef # 配置mypy选项 options = Options() options.targets = ["your_file.py"] options.show_traceback = True # 执行类型检查并获取构建结果 build_result = build(options=options) if build_result.errors: print("类型检查失败,请先修复代码中的类型错误") else: # 获取目标文件的语义分析树 module = build_result.files["your_file.py"].tree # 遍历模块内的所有符号 for name, symbol_node in module.names.items(): node = symbol_node.node # 筛选变量、函数、类 if isinstance(node, (Var, FuncDef, ClassDef)): # 获取并打印类型信息 if hasattr(node, "type") and node.type: print(f"{name}: {node.type}") - 注意:mypy的内部API可能随版本更新发生变化,使用时需对应你安装的mypy版本调整代码。
内容的提问来源于stack exchange,提问作者sothrowaway34234234
相关产品推荐
相关产品推荐

