python runtime_error ai_generated true

PydanticDeprecatedSince20: `__fields__` 已弃用,请改用 `model_fields`

PydanticDeprecatedSince20: `__fields__` is deprecated; use `model_fields` instead. Deprecated in Pydantic V2.0 to be removed in V3.0.

ID: python/pydantic-v2-model-fields-deprecated

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

版本兼容性

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

根因分析

为 Pydantic v1 编写的代码访问 model.__fields__ 或 .dict()/.json(),这些在 v2 中已弃用,应改用 model_fields、model_dump()、model_dump_json()。

English

Code written for Pydantic v1 accesses model.__fields__ or .dict()/.json() which are deprecated in v2 in favor of model_fields, model_dump(), model_dump_json().

generic

解决方案

  1. 95% 成功率
    Replace attribute access:
    
    # v1
    for name, field in User.__fields__.items(): ...
    # v2
    for name, field in User.model_fields.items(): ...
  2. 95% 成功率
    Replace serialization methods:
    
    obj.dict()      -> obj.model_dump()
    obj.json()      -> obj.model_dump_json()
    obj.parse_obj(d) -> obj.model_validate(d)

无效尝试

常见但无效的做法:

  1. 65% 失败

    Hides the deprecation but the code still breaks when upgrading to v3 or when stderr is treated as failure in CI.

  2. 75% 失败

    Conflicts with libraries (FastAPI 0.100+, LangChain) that require v2, causing install errors.