Validierungsfehler
Pydantic versucht, nützliche Validierungsfehler bereitzustellen. Nachfolgend finden Sie Details zu häufigen Validierungsfehlern, die bei der Arbeit mit pydantic auftreten können, sowie einige Vorschläge zu deren Behebung.
arguments_type
¶
Dieser Fehler wird ausgelöst, wenn ein Objekt, das während der Validierung als Argumente an eine Funktion übergeben würde, kein tuple
, list
oder dict
ist. Da NamedTuple
in seiner Implementierung Funktionsaufrufe verwendet, ist dies eine Möglichkeit, diesen Fehler zu erzeugen:
from typing import NamedTuple
from pydantic import BaseModel, ValidationError
class MyNamedTuple(NamedTuple):
x: int
class MyModel(BaseModel):
field: MyNamedTuple
try:
MyModel.model_validate({'field': 'invalid'})
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'arguments_type'
assertion_error
¶
Dieser Fehler wird ausgelöst, wenn während der Validierung eine fehlerhafte assert
-Anweisung auftritt:
from pydantic import BaseModel, ValidationError, field_validator
class Model(BaseModel):
x: int
@field_validator('x')
@classmethod
def force_x_positive(cls, v):
assert v > 0
return v
try:
Model(x=-1)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'assertion_error'
bool_parsing
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert eine Zeichenfolge ist, die für die Umwandlung in einen booleschen Wert nicht gültig ist:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: bool
Model(x='true') # OK
try:
Model(x='test')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'bool_parsing'
bool_type
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts für ein bool
Feld nicht gültig ist:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: bool
try:
Model(x=None)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'bool_type'
Dieser Fehler wird auch für strikte Felder ausgelöst, wenn der Eingabewert keine Instanz von bool
ist.
bytes_too_long
¶
Dieser Fehler wird ausgelöst, wenn die Länge eines bytes
größer ist als die max_length
Einschränkung des Felds:
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: bytes = Field(max_length=3)
try:
Model(x=b'test')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'bytes_too_long'
bytes_too_short
¶
Dieser Fehler wird ausgelöst, wenn die Länge eines bytes
kleiner als die min_length
Einschränkung des Felds ist:
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: bytes = Field(min_length=3)
try:
Model(x=b't')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'bytes_too_short'
bytes_type
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts für ein bytes
nicht gültig ist:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: bytes
try:
Model(x=123)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'bytes_type'
Dieser Fehler wird auch für strikte Felder ausgelöst, wenn der Eingabewert keine Instanz von bytes
ist.
callable_type
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert nicht als Callable
gültig ist:
from typing import Any, Callable
from pydantic import BaseModel, ImportString, ValidationError
class Model(BaseModel):
x: ImportString[Callable[[Any], Any]]
Model(x='math:cos') # OK
try:
Model(x='os.path')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'callable_type'
dataclass_exact_type
¶
Dieser Fehler wird ausgelöst, wenn eine Datenklasse mit strict=True
validiert wird und die Eingabe keine Instanz der Datenklasse ist:
import pydantic.dataclasses
from pydantic import TypeAdapter, ValidationError
@pydantic.dataclasses.dataclass
class MyDataclass:
x: str
adapter = TypeAdapter(MyDataclass)
print(adapter.validate_python(MyDataclass(x='test'), strict=True))
#> MyDataclass(x='test')
print(adapter.validate_python({'x': 'test'}))
#> MyDataclass(x='test')
try:
adapter.validate_python({'x': 'test'}, strict=True)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'dataclass_exact_type'
dataclass_type
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert für ein dataclass
ungültig ist:
from pydantic import ValidationError, dataclasses
@dataclasses.dataclass
class Inner:
x: int
@dataclasses.dataclass
class Outer:
y: Inner
Outer(y=Inner(x=1)) # OK
try:
Outer(y=1)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'dataclass_type'
date_from_datetime_inexact
¶
Dieser Fehler wird ausgelöst, wenn der für ein Datumsfeld bereitgestellte Eingabewert für datetime
date
eine Zeitkomponente ungleich Null aufweist. Damit ein Zeitstempel in ein Feld vom Typ date
analysiert werden kann, müssen alle Zeitkomponenten Null sein:
from datetime import date, datetime
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: date
Model(x='2023-01-01') # OK
Model(x=datetime(2023, 1, 1)) # OK
try:
Model(x=datetime(2023, 1, 1, 12))
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'date_from_datetime_inexact'
date_from_datetime_parsing
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert eine Zeichenfolge ist, die nicht für ein date
analysiert werden kann:
from datetime import date
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: date
try:
Model(x='XX1494012000')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'date_from_datetime_parsing'
date_future
¶
Dieser Fehler wird ausgelöst, wenn der für ein FutureDate
-Feld bereitgestellte Eingabewert nicht in der Zukunft liegt:
from datetime import date
from pydantic import BaseModel, FutureDate, ValidationError
class Model(BaseModel):
x: FutureDate
try:
Model(x=date(2000, 1, 1))
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'date_future'
date_parsing
¶
Dieser Fehler wird bei der Validierung von JSON ausgelöst, wenn der Eingabewert eine Zeichenfolge ist, die nicht für ein date
geparst werden kann:
import json
from datetime import date
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: date = Field(strict=True)
try:
Model.model_validate_json(json.dumps({'x': '1'}))
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'date_parsing'
date_past
¶
Dieser Fehler wird ausgelöst, wenn der für ein PastDate
-Feld bereitgestellte Wert nicht in der Vergangenheit liegt:
from datetime import date, timedelta
from pydantic import BaseModel, PastDate, ValidationError
class Model(BaseModel):
x: PastDate
try:
Model(x=date.today() + timedelta(1))
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'date_past'
date_type
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts für ein date
ungültig ist:
from datetime import date
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: date
try:
Model(x=None)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'date_type'
Dieser Fehler wird auch bei strikten Feldern ausgelöst, wenn der Eingabewert keine Instanz von date
ist.
datetime_from_date_parsing
¶
!!! Hinweis In v2.6.0
wird Unterstützung für diesen Fehler sowie Unterstützung für das Parsen von Datums- und Uhrzeitangaben aus dem Datum yyyy-MM-DD
hinzugefügt
Dieser Fehler wird ausgelöst, wenn der Eingabewert eine Zeichenfolge ist, die nicht für ein datetime
-Feld analysiert werden kann:
from datetime import datetime
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: datetime
try:
# there is no 13th month
Model(x='2023-13-01')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'datetime_from_date_parsing'
datetime_future
¶
Dieser Fehler wird ausgelöst, wenn der für ein FutureDatetime
-Feld bereitgestellte Wert nicht in der Zukunft liegt:
from datetime import datetime
from pydantic import BaseModel, FutureDatetime, ValidationError
class Model(BaseModel):
x: FutureDatetime
try:
Model(x=datetime(2000, 1, 1))
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'datetime_future'
datetime_object_invalid
¶
Dieser Fehler wird ausgelöst, wenn etwas am datetime
-Objekt ungültig ist:
from datetime import datetime, tzinfo
from pydantic import AwareDatetime, BaseModel, ValidationError
class CustomTz(tzinfo):
# utcoffset is not implemented!
def tzname(self, _dt):
return 'CustomTZ'
class Model(BaseModel):
x: AwareDatetime
try:
Model(x=datetime(2023, 1, 1, tzinfo=CustomTz()))
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'datetime_object_invalid'
datetime_parsing
¶
Dieser Fehler wird ausgelöst, wenn der Wert eine Zeichenfolge ist, die nicht für ein datetime
-Feld analysiert werden kann:
import json
from datetime import datetime
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: datetime = Field(strict=True)
try:
Model.model_validate_json(json.dumps({'x': 'not a datetime'}))
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'datetime_parsing'
datetime_past
¶
Dieser Fehler wird ausgelöst, wenn der für ein PastDatetime
-Feld bereitgestellte Wert nicht in der Vergangenheit liegt:
from datetime import datetime, timedelta
from pydantic import BaseModel, PastDatetime, ValidationError
class Model(BaseModel):
x: PastDatetime
try:
Model(x=datetime.now() + timedelta(100))
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'datetime_past'
datetime_type
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts für ein datetime
-Feld ungültig ist:
from datetime import datetime
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: datetime
try:
Model(x=None)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'datetime_type'
Dieser Fehler wird auch für strikte Felder ausgelöst, wenn der Eingabewert keine Instanz von datetime
ist.
decimal_max_digits
¶
Dieser Fehler wird ausgelöst, wenn der für eine Decimal
angegebene Wert zu viele Ziffern aufweist:
from decimal import Decimal
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: Decimal = Field(max_digits=3)
try:
Model(x='42.1234')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'decimal_max_digits'
decimal_max_places
¶
Dieser Fehler wird ausgelöst, wenn der für eine Decimal
angegebene Wert zu viele Stellen nach dem Dezimalpunkt aufweist:
from decimal import Decimal
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: Decimal = Field(decimal_places=3)
try:
Model(x='42.1234')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'decimal_max_places'
decimal_parsing
¶
Dieser Fehler wird ausgelöst, wenn der für eine Decimal
angegebene Wert nicht als Dezimalzahl geparst werden konnte:
from decimal import Decimal
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: Decimal = Field(decimal_places=3)
try:
Model(x='test')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'decimal_parsing'
decimal_type
¶
Dieser Fehler wird ausgelöst, wenn der für eine Decimal
angegebene Wert vom falschen Typ ist:
from decimal import Decimal
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: Decimal = Field(decimal_places=3)
try:
Model(x=[1, 2, 3])
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'decimal_type'
Dieser Fehler wird auch für strikte Felder ausgelöst, wenn der Eingabewert keine Instanz von Decimal
ist.
decimal_whole_digits
¶
Dieser Fehler wird ausgelöst, wenn der für eine Decimal
angegebene Wert mehr Ziffern vor dem Dezimalpunkt hat als max_digits
- decimal_places
(sofern beide angegeben sind):
from decimal import Decimal
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: Decimal = Field(max_digits=6, decimal_places=3)
try:
Model(x='12345.6')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'decimal_whole_digits'
Dieser Fehler wird auch für strikte Felder ausgelöst, wenn der Eingabewert keine Instanz von Decimal
ist.
dict_type
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts für ein dict
nicht dict
ist:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: dict
try:
Model(x=['1', '2'])
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'dict_type'
enum
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert in den Elementen eines enum
nicht vorhanden ist:
from enum import Enum
from pydantic import BaseModel, ValidationError
class MyEnum(str, Enum):
option = 'option'
class Model(BaseModel):
x: MyEnum
try:
Model(x='other_option')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'enum'
extra_forbidden
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert zusätzliche Felder enthält, aber model_config['extra'] == 'forbid'
:
from pydantic import BaseModel, ConfigDict, ValidationError
class Model(BaseModel):
x: str
model_config = ConfigDict(extra='forbid')
try:
Model(x='test', y='test')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'extra_forbidden'
Weitere Informationen zur extra
Konfiguration finden Sie im Abschnitt Zusätzliche Attribute.
finite_number
¶
Dieser Fehler wird ausgelöst, wenn der Wert unendlich oder zu groß ist, um während der Validierung als 64-Bit-Gleitkommazahl dargestellt zu werden:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: int
try:
Model(x=2.2250738585072011e308)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'finite_number'
float_parsing
¶
Dieser Fehler wird ausgelöst, wenn der Wert eine Zeichenfolge ist, die nicht als float
geparst werden kann:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: float
try:
Model(x='test')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'float_parsing'
float_type
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts für ein float
-Feld nicht gültig ist:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: float
try:
Model(x=None)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'float_type'
frozen_field
¶
Dieser Fehler wird ausgelöst, wenn Sie versuchen, einem Feld mit frozen=True
einen Wert zuzuweisen oder ein solches Feld zu löschen:
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: str = Field('test', frozen=True)
model = Model()
try:
model.x = 'test1'
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'frozen_field'
try:
del model.x
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'frozen_field'
frozen_instance
¶
Dieser Fehler wird ausgelöst, wenn model_config['frozen] == True
und Sie versuchen, eines der Felder zu löschen oder ihm einen neuen Wert zuzuweisen:
from pydantic import BaseModel, ConfigDict, ValidationError
class Model(BaseModel):
x: int
model_config = ConfigDict(frozen=True)
m = Model(x=1)
try:
m.x = 2
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'frozen_instance'
try:
del m.x
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'frozen_instance'
frozen_set_type
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts für ein frozenset
-Feld nicht gültig ist:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: frozenset
try:
model = Model(x='test')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'frozen_set_type'
get_attribute_error
¶
Dieser Fehler wird ausgelöst, wenn model_config['from_attributes'] == True
und beim Lesen der Attribute wird ein Fehler ausgelöst:
from pydantic import BaseModel, ConfigDict, ValidationError
class Foobar:
def __init__(self):
self.x = 1
@property
def y(self):
raise RuntimeError('intentional error')
class Model(BaseModel):
x: int
y: str
model_config = ConfigDict(from_attributes=True)
try:
Model.model_validate(Foobar())
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'get_attribute_error'
greater_than
¶
Dieser Fehler wird ausgelöst, wenn der Wert nicht größer als die gt
-Einschränkung des Feldes ist:
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: int = Field(gt=10)
try:
Model(x=10)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'greater_than'
greater_than_equal
¶
Dieser Fehler wird ausgelöst, wenn der Wert nicht größer oder gleich der ge
Einschränkung des Feldes ist:
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: int = Field(ge=10)
try:
Model(x=9)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'greater_than_equal'
int_from_float
¶
Dieser Fehler wird ausgelöst, wenn Sie einen float
Wert für ein int
-Feld angeben:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: int
try:
Model(x=0.5)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'int_from_float'
int_parsing
¶
Dieser Fehler wird ausgelöst, wenn der Wert nicht als int
geparst werden kann:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: int
try:
Model(x='test')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'int_parsing'
int_parsing_size
¶
Dieser Fehler wird ausgelöst, wenn versucht wird, einen Python- oder JSON-Wert aus einer Zeichenfolge zu analysieren, die außerhalb des maximalen Bereichs liegt, den die Python- str
zu int
-Analyse zulässt:
import json
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: int
# from Python
assert Model(x='1' * 4_300).x == int('1' * 4_300) # OK
too_long = '1' * 4_301
try:
Model(x=too_long)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'int_parsing_size'
# from JSON
try:
Model.model_validate_json(json.dumps({'x': too_long}))
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'int_parsing_size'
int_type
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts für ein int
-Feld nicht gültig ist:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: int
try:
Model(x=None)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'int_type'
invalid_key
¶
Dieser Fehler wird ausgelöst, wenn versucht wird, ein dict
zu validieren, dessen Schlüssel keine Instanz von str
ist:
from pydantic import BaseModel, ConfigDict, ValidationError
class Model(BaseModel):
x: int
model_config = ConfigDict(extra='allow')
try:
Model.model_validate({'x': 1, b'y': 2})
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'invalid_key'
is_instance_of
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert keine Instanz des erwarteten Typs ist:
from pydantic import BaseModel, ConfigDict, ValidationError
class Nested:
x: str
class Model(BaseModel):
y: Nested
model_config = ConfigDict(arbitrary_types_allowed=True)
try:
Model(y='test')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'is_instance_of'
is_subclass_of
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert keine Unterklasse des erwarteten Typs ist:
from typing import Type
from pydantic import BaseModel, ValidationError
class Nested:
x: str
class Model(BaseModel):
y: Type[Nested]
try:
Model(y='test')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'is_subclass_of'
iterable_type
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert nicht als Iterable
gültig ist:
from typing import Iterable
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
y: Iterable
try:
Model(y=123)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'iterable_type'
iteration_error
¶
Dieser Fehler wird ausgelöst, wenn während der Iteration ein Fehler auftritt:
from typing import List
from pydantic import BaseModel, ValidationError
def gen():
yield 1
raise RuntimeError('error')
class Model(BaseModel):
x: List[int]
try:
Model(x=gen())
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'iteration_error'
json_invalid
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert keine gültige JSON-Zeichenfolge ist:
from pydantic import BaseModel, Json, ValidationError
class Model(BaseModel):
x: Json
try:
Model(x='test')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'json_invalid'
json_type
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert von einem Typ ist, der nicht als JSON geparst werden kann:
from pydantic import BaseModel, Json, ValidationError
class Model(BaseModel):
x: Json
try:
Model(x=None)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'json_type'
less_than
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert nicht kleiner als die lt
Beschränkung des Feldes ist:
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: int = Field(lt=10)
try:
Model(x=10)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'less_than'
less_than_equal
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert nicht kleiner oder gleich der le
des Feldes ist:
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: int = Field(le=10)
try:
Model(x=11)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'less_than_equal'
list_type
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts für ein list
ungültig ist:
from typing import List
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: List[int]
try:
Model(x=1)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'list_type'
literal_error
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert nicht einer der erwarteten Literalwerte ist:
from typing_extensions import Literal
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: Literal['a', 'b']
Model(x='a') # OK
try:
Model(x='c')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'literal_error'
mapping_type
¶
Dieser Fehler wird ausgelöst, wenn während der Validierung aufgrund eines Fehlers beim Aufruf der Methoden aus dem Mapping
-Protokoll ein Problem auftritt, z. B. .items()
:
from collections.abc import Mapping
from typing import Dict
from pydantic import BaseModel, ValidationError
class BadMapping(Mapping):
def items(self):
raise ValueError()
def __iter__(self):
raise ValueError()
def __getitem__(self, key):
raise ValueError()
def __len__(self):
return 1
class Model(BaseModel):
x: Dict[str, str]
try:
Model(x=BadMapping())
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'mapping_type'
missing
¶
Dieser Fehler wird ausgelöst, wenn erforderliche Felder im Eingabewert fehlen:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: str
try:
Model()
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'missing'
missing_argument
¶
Dieser Fehler wird ausgelöst, wenn ein erforderliches Positions- oder Schlüsselwortargument nicht an eine mit validate_call
dekorierte Funktion übergeben wird:
from pydantic import ValidationError, validate_call
@validate_call
def foo(a: int):
return a
try:
foo()
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'missing_argument'
missing_keyword_only_argument
¶
Dieser Fehler wird ausgelöst, wenn ein erforderliches Argument, das nur aus Schlüsselwörtern besteht, nicht an eine Funktion übergeben wird, die mit validate_call
versehen ist:
from pydantic import ValidationError, validate_call
@validate_call
def foo(*, a: int):
return a
try:
foo()
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'missing_keyword_only_argument'
missing_positional_only_argument
¶
Dieser Fehler wird ausgelöst, wenn ein erforderliches Nur-Positionsargument nicht an eine mit validate_call
dekorierte Funktion übergeben wird:
from pydantic import ValidationError, validate_call
@validate_call
def foo(a: int, /):
return a
try:
foo()
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'missing_positional_only_argument'
model_attributes_type
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert kein gültiges Wörterbuch, keine gültige Modellinstanz oder Instanz ist, aus der Felder extrahiert werden können:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
a: int
b: int
# simply validating a dict
print(Model.model_validate({'a': 1, 'b': 2}))
#> a=1 b=2
class CustomObj:
def __init__(self, a, b):
self.a = a
self.b = b
# using from attributes to extract fields from an objects
print(Model.model_validate(CustomObj(3, 4), from_attributes=True))
#> a=3 b=4
try:
Model.model_validate('not an object', from_attributes=True)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'model_attributes_type'
model_type
¶
Dieser Fehler wird ausgelöst, wenn die Eingabe in ein Modell keine Instanz des Modells oder Diktats ist:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
a: int
b: int
# simply validating a dict
m = Model.model_validate({'a': 1, 'b': 2})
print(m)
#> a=1 b=2
# validating an existing model instance
print(Model.model_validate(m))
#> a=1 b=2
try:
Model.model_validate('not an object')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'model_type'
multiple_argument_values
¶
Dieser Fehler wird ausgelöst, wenn Sie mehrere Werte für ein einzelnes Argument angeben, während Sie eine mit validate_call
dekorierte Funktion aufrufen:
from pydantic import ValidationError, validate_call
@validate_call
def foo(a: int):
return a
try:
foo(1, a=2)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'multiple_argument_values'
multiple_of
¶
Dieser Fehler wird ausgelöst, wenn die Eingabe kein Vielfaches der multiple_of
Einschränkung eines Feldes ist:
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: int = Field(multiple_of=5)
try:
Model(x=1)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'multiple_of'
no_such_attribute
¶
Dieser Fehler wird ausgelöst, wenn validate_assignment=True
in der Konfiguration und Sie versuchen, einem Attribut, das kein vorhandenes Feld ist, einen Wert zuzuweisen:
from pydantic import ConfigDict, ValidationError, dataclasses
@dataclasses.dataclass(config=ConfigDict(validate_assignment=True))
class MyDataclass:
x: int
m = MyDataclass(x=1)
try:
m.y = 10
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'no_such_attribute'
none_required
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert nicht None
für ein Feld ist, das None
erfordert:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: None
try:
Model(x=1)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'none_required'
!!! Hinweis Dieser Fehler kann auftreten, wenn in Ihrem Modell eine Namenskollision zwischen einem Feldnamen und seinem Typ vorliegt. Genauer gesagt wird dieser Fehler wahrscheinlich ausgelöst, wenn der Standardwert dieses Felds None
ist.
For example, the following would yield the `none_required` validation error since the field `int` is set to a default value of `None` and has the exact same name as its type, which causes problems with validation.
```py
from typing import Optional
from pydantic import BaseModel
class M1(BaseModel):
int: Optional[int] = None
m = M1(int=123) # errors
```
recursion_loop
¶
Dieser Fehler wird ausgelöst, wenn eine zyklische Referenz erkannt wird:
from typing import List
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: List['Model']
d = {'x': []}
d['x'].append(d)
try:
Model(**d)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'recursion_loop'
set_type
¶
Dieser Fehler wird ausgelöst, wenn der Werttyp für ein set
Feld ungültig ist:
from typing import Set
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: Set[int]
try:
Model(x='test')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'set_type'
string_pattern_mismatch
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert nicht mit der pattern
des Feldes übereinstimmt:
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: str = Field(pattern='test')
try:
Model(x='1')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'string_pattern_mismatch'
string_sub_type
¶
Dieser Fehler wird ausgelöst, wenn der Wert eine Instanz eines strikten Untertyps von str
ist und das Feld strikt ist:
from enum import Enum
from pydantic import BaseModel, Field, ValidationError
class MyEnum(str, Enum):
foo = 'foo'
class Model(BaseModel):
x: str = Field(strict=True)
try:
Model(x=MyEnum.foo)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'string_sub_type'
string_too_long
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert eine Zeichenfolge ist, deren Länge größer als die max_length
Einschränkung des Feldes ist:
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: str = Field(max_length=3)
try:
Model(x='test')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'string_too_long'
string_too_short
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert eine Zeichenfolge ist, deren Länge kleiner als die min_length
des Felds ist:
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: str = Field(min_length=3)
try:
Model(x='t')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'string_too_short'
string_type
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts für ein str
Feld nicht gültig ist:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: str
try:
Model(x=1)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'string_type'
Dieser Fehler wird auch für strikte Felder ausgelöst, wenn der Eingabewert keine Instanz von str
ist.
string_unicode
¶
Dieser Fehler wird ausgelöst, wenn der Wert nicht als Unicode-Zeichenfolge analysiert werden kann:
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: str
try:
Model(x=b'\x81')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'string_unicode'
time_delta_parsing
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert eine Zeichenfolge ist, die nicht für ein timedelta
-Feld analysiert werden kann:
from datetime import timedelta
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: timedelta
try:
Model(x='t')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'time_delta_parsing'
time_delta_type
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts für ein timedelta
Feld nicht gültig ist:
from datetime import timedelta
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: timedelta
try:
Model(x=None)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'time_delta_type'
Dieser Fehler wird auch für strikte Felder ausgelöst, wenn der Eingabewert keine Instanz von timedelta
ist.
time_parsing
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert eine Zeichenfolge ist, die für ein time
nicht analysiert werden kann:
from datetime import time
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: time
try:
Model(x='25:20:30.400')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'time_parsing'
time_type
¶
Dieser Fehler wird ausgelöst, wenn der Werttyp für ein time
ungültig ist:
from datetime import time
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: time
try:
Model(x=None)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'time_type'
Dieser Fehler wird auch für strikte Felder ausgelöst, wenn der Eingabewert keine time
ist.
timezone_aware
¶
Dieser Fehler wird ausgelöst, wenn der datetime
Wert, der für ein datetime
-Feld mit Zeitzonenerkennung bereitgestellt wird, keine Zeitzoneninformationen enthält:
from datetime import datetime
from pydantic import AwareDatetime, BaseModel, ValidationError
class Model(BaseModel):
x: AwareDatetime
try:
Model(x=datetime.now())
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'timezone_aware'
timezone_naive
¶
Dieser Fehler wird ausgelöst, wenn der für ein Zeitzonen-naives datetime
bereitgestellte datetime
Wert Zeitzoneninformationen enthält:
from datetime import datetime, timezone
from pydantic import BaseModel, NaiveDatetime, ValidationError
class Model(BaseModel):
x: NaiveDatetime
try:
Model(x=datetime.now(tz=timezone.utc))
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'timezone_naive'
too_long
¶
Dieser Fehler wird ausgelöst, wenn die Länge des Eingabewerts größer ist als die max_length
Einschränkung des Feldes:
from typing import List
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: List[int] = Field(max_length=3)
try:
Model(x=[1, 2, 3, 4])
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'too_long'
too_short
¶
Dieser Fehler wird ausgelöst, wenn die Wertlänge kleiner als die min_length
des Felds ist:
from typing import List
from pydantic import BaseModel, Field, ValidationError
class Model(BaseModel):
x: List[int] = Field(min_length=3)
try:
Model(x=[1, 2])
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'too_short'
tuple_type
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts für ein tuple
ungültig ist:
from typing import Tuple
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: Tuple[int]
try:
Model(x=None)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'tuple_type'
Dieser Fehler wird auch für strikte Felder ausgelöst, wenn der Eingabewert keine Instanz von tuple
ist.
unexpected_keyword_argument
¶
Dieser Fehler wird ausgelöst, wenn Sie einen Wert per Schlüsselwort für ein Nur-Positionsargument angeben, während Sie eine mit validate_call
dekorierte Funktion aufrufen:
from pydantic import ValidationError, validate_call
@validate_call
def foo(a: int, /):
return a
try:
foo(a=2)
except ValidationError as exc:
print(repr(exc.errors()[1]['type']))
#> 'unexpected_keyword_argument'
Es wird auch bei Verwendung von pydantic.dataclasses und extra=forbid
ausgelöst:
from pydantic import TypeAdapter, ValidationError
from pydantic.dataclasses import dataclass
@dataclass(config={'extra': 'forbid'})
class Foo:
bar: int
try:
TypeAdapter(Foo).validate_python({'bar': 1, 'foobar': 2})
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'unexpected_keyword_argument'
unexpected_positional_argument
¶
Dieser Fehler wird ausgelöst, wenn Sie einen Positionswert für ein Nur-Schlüsselwort-Argument angeben, während Sie eine mit validate_call
dekorierte Funktion aufrufen:
from pydantic import ValidationError, validate_call
@validate_call
def foo(*, a: int):
return a
try:
foo(2)
except ValidationError as exc:
print(repr(exc.errors()[1]['type']))
#> 'unexpected_positional_argument'
union_tag_invalid
¶
Dieser Fehler wird ausgelöst, wenn der Diskriminator der Eingabe nicht einem der erwarteten Werte entspricht:
from typing import Union
from typing_extensions import Literal
from pydantic import BaseModel, Field, ValidationError
class BlackCat(BaseModel):
pet_type: Literal['blackcat']
class WhiteCat(BaseModel):
pet_type: Literal['whitecat']
class Model(BaseModel):
cat: Union[BlackCat, WhiteCat] = Field(..., discriminator='pet_type')
try:
Model(cat={'pet_type': 'dog'})
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'union_tag_invalid'
union_tag_not_found
¶
Dieser Fehler wird ausgelöst, wenn es nicht möglich ist, einen Diskriminatorwert aus der Eingabe zu extrahieren:
from typing import Union
from typing_extensions import Literal
from pydantic import BaseModel, Field, ValidationError
class BlackCat(BaseModel):
pet_type: Literal['blackcat']
class WhiteCat(BaseModel):
pet_type: Literal['whitecat']
class Model(BaseModel):
cat: Union[BlackCat, WhiteCat] = Field(..., discriminator='pet_type')
try:
Model(cat={'name': 'blackcat'})
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'union_tag_not_found'
url_parsing
¶
Dieser Fehler wird ausgelöst, wenn der Eingabewert nicht als URL geparst werden kann:
from pydantic import AnyUrl, BaseModel, ValidationError
class Model(BaseModel):
x: AnyUrl
try:
Model(x='test')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'url_parsing'
url_scheme
¶
Dieser Fehler wird ausgelöst, wenn das URL-Schema für den URL-Typ des Felds nicht gültig ist:
from pydantic import BaseModel, HttpUrl, ValidationError
class Model(BaseModel):
x: HttpUrl
try:
Model(x='ftp://example.com')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'url_scheme'
url_syntax_violation
¶
Dieser Fehler wird ausgelöst, wenn die URL-Syntax ungültig ist:
from pydantic import BaseModel, Field, HttpUrl, ValidationError
class Model(BaseModel):
x: HttpUrl = Field(strict=True)
try:
Model(x='http:////example.com')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'url_syntax_violation'
url_too_long
¶
Dieser Fehler wird ausgelöst, wenn die URL-Länge größer als 2083 ist:
from pydantic import BaseModel, HttpUrl, ValidationError
class Model(BaseModel):
x: HttpUrl
try:
Model(x='x' * 2084)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'url_too_long'
url_type
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts für ein URL-Feld nicht gültig ist:
from pydantic import BaseModel, HttpUrl, ValidationError
class Model(BaseModel):
x: HttpUrl
try:
Model(x=None)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'url_type'
uuid_parsing
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts für ein UUID-Feld nicht gültig ist:
from uuid import UUID
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
u: UUID
try:
Model(u='12345678-124-1234-1234-567812345678')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'uuid_parsing'
uuid_type
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts keine gültige Instanz für ein UUID-Feld (str, bytes oder UUID) ist:
from uuid import UUID
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
u: UUID
try:
Model(u=1234567812412341234567812345678)
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'uuid_type'
uuid_version
¶
Dieser Fehler wird ausgelöst, wenn der Typ des Eingabewerts nicht mit der UUID-Version übereinstimmt:
from pydantic import UUID5, BaseModel, ValidationError
class Model(BaseModel):
u: UUID5
try:
Model(u='a6cc5730-2261-11ee-9c43-2eb5a363657c')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'uuid_version'
value_error
¶
Dieser Fehler wird ausgelöst, wenn während der Validierung ein ValueError
auftritt:
from pydantic import BaseModel, ValidationError, field_validator
class Model(BaseModel):
x: str
@field_validator('x')
@classmethod
def repeat_b(cls, v):
raise ValueError()
try:
Model(x='test')
except ValidationError as exc:
print(repr(exc.errors()[0]['type']))
#> 'value_error'
本文总阅读量次