python data_error ai_generated true

pydantic_core._pydantic_core.ValidationError: 1 validation error for Event when Input should be a valid datetime, invalid date separator, expected `-` [type=datetime_parsing, input_value='2024/01/15', input_type=str]

ID: python/pydantic-datetime-parsing

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

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
2.x active

Root Cause

The string uses slash separators that Pydantic v2's strict ISO parser rejects. It expects ISO 8601 with dashes.

generic

中文

字符串使用了斜杠分隔符,Pydantic v2 的严格 ISO 解析器拒绝该格式,它期望使用短横线的 ISO 8601 格式。

Workarounds

  1. 90% success
    from pydantic import BaseModel, field_validator
    from dateutil import parser
    class Event(BaseModel):
        when: 'datetime'
        @field_validator('when', mode='before')
        @classmethod
        def parse(cls, v):
            return parser.parse(v) if isinstance(v, str) else v
  2. 85% success
    import re
    s = re.sub(r'/', '-', '2024/01/15')
    Event(when=s)

Dead Ends

Common approaches that don't work:

  1. 50% fail

    datetime_format only applies to date fields, not datetime, and won't accept time-less strings.

  2. 60% fail

    Loses validation; downstream code must branch on type.

  3. 45% fail

    Every call site must remember to convert; easy to miss and inconsistent.