python data_error ai_generated true

pydantic_core._pydantic_core.ValidationError:1 个验证错误(Event) 无法使用鉴别器 'kind' 提取标签 [type=union_tag_not_found, input_value={'type': 'click'}, input_type=dict]

pydantic_core._pydantic_core.ValidationError: 1 validation error for Event Unable to extract tag using discriminator 'kind' [type=union_tag_not_found, input_value={'type': 'click'}, input_type=dict]

ID: python/pydantic-union-tag-required

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

版本兼容性

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

根因分析

鉴别联合期望鉴别器键('kind'),但输入提供了不同的键('type')。

English

A discriminated union expects a discriminator key ('kind') but the input provides a different key ('type').

generic

解决方案

  1. 95% 成功率
    from typing import Literal, Union, Annotated
    from pydantic import BaseModel, Field
    class Click(BaseModel):
        type: Literal['click']
        x: int
    class View(BaseModel):
        type: Literal['view']
        url: str
    Event = Annotated[Union[Click, View], Field(discriminator='type')]
  2. 80% 成功率
    class Click(BaseModel):
        kind: Literal['click'] = Field(validation_alias=AliasChoices('kind','type'))

无效尝试

常见但无效的做法:

  1. 55% 失败

    Literal values on subclasses still declare kind='click' etc.; tag mismatch persists.

  2. 60% 失败

    Loses discriminated parsing; downstream isinstance checks become unreliable.

  3. 40% 失败

    Works but silently mutates payloads; breaks strict round-trip serialization.