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

为何mypy无法捕获main()函数中的类型错误?

mypy无法捕获函数内类型不兼容错误的原因

现象说明

  • 当代码在全局作用域创建MyClass实例时,mypy能正常捕获类型不兼容错误:
class MyClass():
    def __init__(self, a: int):
        pass

channel = MyClass(0.)  # mypy会报错:Argument 1 has incompatible type "float"; expected "int"
  • 但把相同逻辑放到未标注类型的函数内时,mypy无法捕获错误:
class MyClass():
    def __init__(self, a: int):
        pass

def main():
    channel = MyClass(0.)  # mypy无报错

if __name__ == "__main__":
    main()

核心原因

mypy的默认行为是:不对未添加类型注解的函数内部代码做类型检查。
你代码里的main函数没有任何类型注解(比如返回值注解-> None),mypy会将其判定为“未类型化函数”,直接跳过内部的类型校验逻辑。而全局作用域的代码不在这个豁免范围内,所以第一个场景能被正常检查。

解决办法

有两种方式可以让mypy检查这类函数:

  1. 给函数添加类型注解,比如给main加上返回值注解:
def main() -> None:
    channel = MyClass(0.)
  1. 在运行mypy时添加--check-untyped-defs参数,强制检查所有未标注类型的函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:47:01