mypy在pre-commit钩子运行时报‘Too many arguments for object’,本地无错
问题排查:pre-commit钩子mypy报错但本地执行无问题
代码示例
from typing import Callable, Type, TypeVar T = TypeVar("T") def repo(class_: Type[T]) -> Callable: def instantiate(*args, **kwargs) -> T: return class_(*args, **kwargs) return instantiate
问题现象
上述代码在pre-commit钩子中运行mypy时抛出错误:error: Too many arguments for 'object',但本地执行python poetry run mypy repo.py却无此错误。
排查线索
- 检查pre-commit配置中mypy的版本,确认是否与本地环境的mypy版本一致。不同版本的mypy对类型推断逻辑可能存在差异,旧版本可能无法正确处理
Type[T]的参数兼容性。 - 查看pre-commit钩子中mypy的执行参数,是否包含本地执行时未启用的严格检查选项(如
--strict、--disallow-any-generics等),这类选项会触发更严格的类型校验规则。 - 确认pre-commit运行的隔离环境是否与本地环境一致:pre-commit会在独立虚拟环境中运行钩子,可能未安装项目依赖的类型库,或者依赖版本不同,导致类型推断异常。
- 检查pre-commit配置中mypy钩子的工作目录,是否与本地执行时的目录不同,导致mypy未正确读取项目的
mypy.ini或pyproject.toml配置,转而使用默认的严格检查规则。 - 验证代码中调用
repo函数的位置:如果pre-commit检查的是整个代码库,可能存在其他地方错误地将object类传入repo函数,而本地仅检查了repo.py单个文件,因此未触发该错误。
内容的提问来源于stack exchange,提问作者Joe Catin
相关产品推荐
相关产品推荐

