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

Pydantic自定义模型传入字典报__init__参数数量不匹配错误如何解决?

报错根因

Pydantic 2.x版本的BaseModel构造函数默认仅支持关键字参数传入,不接受位置参数。你将jsond作为位置参数直接传入SellSideCustomer的构造方法,就会触发参数数量不匹配的报错,并非你实际传入了2个参数,是Pydantic内部的构造方法没有设计接收位置参数的逻辑,传入位置参数就会触发该提示。

修复方案

有两种常用的修复方式:

  • 方式一:将字典拆包为关键字参数传入,将实例化代码修改为:
sch = SellSideCustomer(**jsond)
  • 方式二:使用Pydantic内置的model_validate方法传入字典,这种方式更适合动态传参的场景,性能也更优:
sch = SellSideCustomer.model_validate(jsond)
额外注意:字段类型不匹配问题

解决参数报错后你还会遇到类型验证错误,原因是你的SellSideCustomer中creds字段定义为Dict[str, SellSideCreds],要求是「键为字符串、值为SellSideCreds对象的字典」,但你当前传入的jsond里的creds本身就是单个SellSideCreds结构的字典,和定义不匹配。
如果你的需求是creds存储单个凭证,直接修改字段定义即可:

class SellSideCustomer(_BaseModel):
    creds: SellSideCreds
    class Config:
        orm_mode = True

如果要保留Dict[str, SellSideCreds]的定义,需要调整你的jsond结构:

jsond = {"creds":
                {
                "mrhowdy": { # 多一层字符串key
                    "user_name":"mrhowdy",
                    "user_pass":"heythere"
                }
                }
        }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:36:04