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

使用mypy做Python静态类型检查时遇报错:Name 'google' is not defined

解决mypy报错“Name 'google' is not defined”的问题

我之前在项目里用mypy检查protobuf相关代码时,也碰到过一模一样的错误。核心问题是mypy没办法识别你在类型注解里直接写的google.protobuf.timestamp_pb2.Timestamp,因为它找不到google这个命名空间的定义。下面给你几个实用的解决办法:

  • 显式导入对应的类型模块
    最直接的方式是在文件顶部把需要的类型导入进来,这样mypy就能找到它了。比如:

    from google.protobuf.timestamp_pb2 import Timestamp
    

    然后把你的类型注解改成更简洁的形式:

    # type: () -> Timestamp
    

    如果你坚持要用完整的路径名,那至少得导入google或者google.protobuf命名空间,比如:

    import google.protobuf.timestamp_pb2
    

    不过还是推荐第一种直接导入类的方式,代码更清晰,也能避免这类命名空间问题。

  • 安装protobuf的类型 stubs
    有时候即使你已经装了protobuf库,mypy可能还是拿不到它的类型定义。这时候需要安装官方维护的类型 stubs包,运行下面的命令就行:

    pip install types-protobuf
    

    安装完成后,mypy就能正确识别所有protobuf相关的类型了。

  • 检查mypy的配置文件
    最后可以检查一下你的mypy.ini或者pyproject.toml配置,看看有没有把google相关的模块排除在检查范围之外。如果有类似exclude = ["google/*"]的配置,得把它去掉,让mypy能扫描到这些模块的类型信息。

内容的提问来源于stack exchange,提问作者rajan sthapit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:27:19