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
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').
解决方案
-
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')] -
80% 成功率
class Click(BaseModel): kind: Literal['click'] = Field(validation_alias=AliasChoices('kind','type'))
无效尝试
常见但无效的做法:
-
55% 失败
Literal values on subclasses still declare kind='click' etc.; tag mismatch persists.
-
60% 失败
Loses discriminated parsing; downstream isinstance checks become unreliable.
-
40% 失败
Works but silently mutates payloads; breaks strict round-trip serialization.