pydantic_core._pydantic_core.ValidationError: 不允许额外的输入字段
pydantic_core._pydantic_core.ValidationError: 1 validation error for User Extra inputs are not permitted [type=extra_forbidden, input_value='admin', input_type=str]
ID: python/pydantic-v2-extra-input-forbidden
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| 2.x | active | — | — | — |
根因分析
在 Pydantic v2 中,默认 model_config 不再允许额外字段。输入字典中任何未声明的键都会触发 extra_forbidden 错误。
English
In Pydantic v2, the default model_config no longer allows extra fields. Any key in the input dict that is not declared as a field triggers extra_forbidden.
解决方案
-
95% 成功率
Declare the field explicitly on the model: class User(BaseModel): name: str role: str = 'user' -
90% 成功率
If you intentionally want to accept unknown keys: class User(BaseModel): model_config = ConfigDict(extra='ignore') name: str -
85% 成功率
For dynamic keys, use a dict field: class User(BaseModel): name: str metadata: dict[str, Any] = {}
无效尝试
常见但无效的做法:
-
70% 失败
The extra data is silently discarded, so downstream code that relies on it raises KeyError or AttributeError later.
-
55% 失败
Fields become untyped Any attributes; validation is skipped and IDE/type-checker support is lost, causing subtle runtime bugs.
-
80% 失败
Loses v2 performance, Rust core, and breaks other dependencies that require v2.