python data_error ai_generated true

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

Also available as: JSON · Markdown · 中文
80%Fix Rate
87%Confidence
0Evidence
2024-05-19First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
2.x active

Root Cause

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

generic

中文

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

Workarounds

  1. 95% success
    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% success
    class Click(BaseModel):
        kind: Literal['click'] = Field(validation_alias=AliasChoices('kind','type'))

Dead Ends

Common approaches that don't work:

  1. 55% fail

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

  2. 60% fail

    Loses discriminated parsing; downstream isinstance checks become unreliable.

  3. 40% fail

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