python config_error ai_generated true

pydantic.errors.PydanticUserError:字段 'tags' 需要默认值或 default_factory;Pydantic v2 不允许可变默认值。

pydantic.errors.PydanticUserError: Field 'tags' requires a default value or default_factory; mutable defaults are not allowed in Pydantic v2

ID: python/pydantic-nested-dict-default-mutable

其他格式: JSON · Markdown 中文 · English
80%修复率
89%置信度
0证据数
2024-02-08首次发现

版本兼容性

版本状态引入弃用备注
2.x active

根因分析

字段直接使用了可变默认值(list、dict、set),Pydantic v2 为避免共享状态 bug 而拒绝此写法。

English

A mutable default (list, dict, set) was provided directly to a field, which Pydantic v2 rejects to avoid shared-state bugs.

generic

解决方案

  1. 98% 成功率
    from pydantic import BaseModel, Field
    class M(BaseModel):
        tags: list[str] = Field(default_factory=list)
  2. 90% 成功率
    class M(BaseModel):
        tags: list[str] = []  # Pydantic copies per-instance

无效尝试

常见但无效的做法:

  1. 70% 失败

    Same mutable default problem; Pydantic raises at class definition.

  2. 50% 失败

    Callers must handle None everywhere; downstream iteration crashes.

  3. 55% 失败

    Bypasses Pydantic field metadata; model_dump and JSON schema lose the default.