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

运行pydantic.mypy与mypy时报错:__init__缺少required参数'default'怎么办?

问题分析与解决:mypy与pydantic插件兼容性报错

配置信息

mypy.ini 内容

[mypy]
python_version = 3.10
plugins = pydantic.mypy

[pydantic-mypy]
init_forbid_extra = True
init_typed = True
warn_required_dynamic_aliases = True

requirements.txt 依赖

pydantic==1.10.5
mypy==1.7.1

报错信息

执行mypy --show-traceback时出现以下错误:

Traceback (most recent call last):
  File "mypy/semanal.py", line 6525, in accept
  File "mypy/nodes.py", line 1140, in accept
  File "mypy/semanal.py", line 1608, in visit_class_def
  File "mypy/semanal.py", line 1693, in analyze_class
  File "mypy/semanal.py", line 1727, in analyze_class_body_common
  File "mypy/semanal.py", line 1814, in apply_class_plugin_hooks
  File "pydantic/mypy.py", line 140, in pydantic.mypy.PydanticPlugin._pydantic_model_class_maker_callback
  File "pydantic/mypy.py", line 284, in pydantic.mypy.PydanticModelTransformer.transform
  File "pydantic/mypy.py", line 463, in pydantic.mypy.PydanticModelTransformer.add_construct_method
TypeError: __init__() missing required argument 'default' (pos 6)

问题原因

这是版本兼容性问题:mypy 1.7.1对内部API做了调整,构造函数相关方法新增了default必填参数,但pydantic 1.10.5的mypy插件仍沿用旧版API调用逻辑,未适配参数变化,导致调用时参数缺失报错。

解决方法

提供三种可行方案,按需选择:

  • 方案1:降级mypy到兼容版本
    修改requirements.txt中的mypy版本为mypy==1.6.1,该版本与pydantic 1.10.5的插件完全兼容,无需调整项目代码。
  • 方案2:升级pydantic到修复兼容问题的版本
    将pydantic升级到pydantic==1.10.12(该版本专门修复了与mypy 1.7+的兼容问题);也可以直接升级到pydantic v2版本,但注意v2存在API变更,需要同步调整项目中的Pydantic代码。
  • 方案3:临时禁用pydantic mypy插件(不推荐)
    修改mypy.ini中的plugins行,注释掉pydantic插件:
    # plugins = pydantic.mypy
    
    此方法会失去Pydantic模型的类型检查能力,仅作为临时应急方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:45:55