You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:52:36