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

Pydantic与Pylint冲突E1137:字典项赋值报错排查求助

Pylint E1137错误排查:Pydantic字典字段赋值问题

问题

使用Pydantic 2.x定义包含字典类型字段的模型,代码实际运行正常,但Pylint 3.x抛出E1137错误,提示字典字段不支持项赋值。

代码示例

from pydantic import Field, BaseModel


class Object(BaseModel):
    data: dict[str, str] = Field(default={}, description="description")

    def update_data(self, values: dict[str, str]) -> None:
        """Update self dictionary."""
        for key, value in values.items():
            self.data[key] = value


obj = Object()
obj.update_data(values={"key": "value"})
print(obj.data)  # {'key': 'value'}

执行命令

pylint --disable=all --enable=E1137 my_script.py

报错信息

E1137: 'self.data' does not support item assignment (unsupported-assignment-operation)

环境依赖版本

pydantic           2.4.2
pydantic_core      2.10.1
pydantic-settings  2.0.3
pylint             3.0.2

原因

Pylint的静态分析无法识别Pydantic 2.x中字典字段的动态代理机制:虽然运行时self.data可以像普通字典一样修改,但Pylint静态检查时会将其判定为不可变对象,从而抛出错误。

解决方法

方法1:调整代码写法(无需额外依赖)

直接替换整个字典,让Pylint能识别赋值操作的合法性:

def update_data(self, values: dict[str, str]) -> None:
    """Update self dictionary."""
    # 合并原有字典与新值,替换整个字段
    self.data = {**self.data, **values}

或者使用字典的update方法(运行时有效,部分场景下Pylint仍可能报错,需结合插件):

def update_data(self, values: dict[str, str]) -> None:
    """Update self dictionary."""
    self.data.update(values)

方法2:安装Pylint-Pydantic插件(推荐)

安装专门为Pydantic优化的Pylint插件,让静态检查能正确识别Pydantic字段的行为:

pip install pylint-pydantic

运行Pylint时加载插件:

pylint --disable=all --enable=E1137 --load-plugins=pylint_pydantic my_script.py

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:30:19