Validatiefouten
Pydantic probeert nuttige validatiefouten te bieden. Hieronder vindt u details over veelvoorkomende validatiefouten die gebruikers kunnen tegenkomen bij het werken met pydantic, samen met enkele suggesties over hoe u deze kunt oplossen.
argumenten_type¶
Deze fout treedt op als een object dat tijdens de validatie als argumenten aan een functie wordt doorgegeven, geen tuple
, list
of dict
is. Omdat NamedTuple
bij de implementatie functieaanroepen gebruikt, is dit een manier om deze fout te veroorzaken:
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'
bewering_fout¶
Deze fout treedt op als er tijdens de validatie een falende assert
instructie wordt aangetroffen:
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
¶
Deze fout treedt op als de invoerwaarde een tekenreeks is die niet geldig is voor dwang naar een Booleaanse waarde:
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
¶
Deze fout treedt op als het type van de invoerwaarde niet geldig is voor een bool
:
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'
Deze fout treedt ook op voor strikte velden wanneer de invoerwaarde geen exemplaar van bool
is.
bytes_too_long
¶
Deze fout treedt op als de lengte van een bytes
groter is dan de max_length
beperking van het veld:
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
¶
Deze fout treedt op als de lengte van een bytes
kleiner is dan de min_length
beperking van het veld:
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
¶
Deze fout treedt op als het type van de invoerwaarde niet geldig is voor een bytes
:
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'
Deze fout treedt ook op voor strikte velden als de invoerwaarde geen exemplaar van bytes
is.
opvraagbaar_type¶
Deze fout treedt op als de invoerwaarde niet geldig is als Callable
:
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
¶
Deze fout treedt op bij het valideren van een dataklasse met strict=True
en de invoer is geen exemplaar van de dataklasse:
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
¶
Deze fout treedt op als de invoerwaarde niet geldig is voor een dataclass
-veld:
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
¶
Deze fout treedt op als de datetime
invoerwaarde voor een date
een tijdcomponent bevat die niet nul is. Om een tijdstempel te parseren in een veld van het type date
, moeten de tijdcomponenten allemaal nul zijn:
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
¶
Deze fout treedt op als de invoerwaarde een tekenreeks is die niet kan worden geparseerd voor een date
:
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
¶
Deze fout treedt op wanneer de invoerwaarde voor een FutureDate
veld niet in de toekomst ligt:
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
¶
Deze fout treedt op bij het valideren van JSON waarbij de invoerwaarde een tekenreeks is die niet kan worden geparseerd voor een date
:
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
¶
Deze fout treedt op als de waarde die is opgegeven voor een PastDate
veld niet in het verleden ligt:
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
¶
Deze fout treedt op als het type van de invoerwaarde niet geldig is voor een date
:
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'
Deze fout treedt ook op voor strikte velden wanneer de invoerwaarde geen exemplaar van date
is.
datetime_from_date_parsing
¶
!!! note Ondersteuning voor deze fout, samen met ondersteuning voor het parseren van datetimes van yyyy-MM-DD
datums, wordt toegevoegd in v2.6.0
Deze fout treedt op als de invoerwaarde een tekenreeks is die niet kan worden geparseerd voor een datetime
-veld:
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
¶
Deze fout treedt op wanneer de waarde die is opgegeven voor een FutureDatetime
veld niet in de toekomst ligt:
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
¶
Deze fout treedt op als iets over het datetime
object niet geldig is:
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
¶
Deze fout treedt op als de waarde een tekenreeks is die niet kan worden geparseerd voor een datetime
-veld:
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
¶
Deze fout treedt op als de waarde die is opgegeven voor een PastDatetime
veld niet in het verleden ligt:
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
¶
Deze fout treedt op als het type van de invoerwaarde niet geldig is voor een datetime
-veld:
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'
Deze fout treedt ook op voor strikte velden wanneer de invoerwaarde geen exemplaar van datetime
is.
decimal_max_digits
¶
Deze fout treedt op als de opgegeven waarde voor een Decimal
te veel cijfers bevat:
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
¶
Deze fout treedt op als de opgegeven waarde voor een Decimal
te veel cijfers achter de komma bevat:
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
¶
Deze fout treedt op wanneer de opgegeven waarde voor een Decimal
niet als een decimaal getal kan worden geparseerd:
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
¶
Deze fout treedt op als de opgegeven waarde voor een Decimal
van het verkeerde type is:
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'
Deze fout treedt ook op voor strikte velden wanneer de invoerwaarde geen exemplaar van Decimal
is.
decimal_whole_digits
¶
Deze fout treedt op als de opgegeven waarde voor een Decimal
meer cijfers vóór de komma heeft dan max_digits
- decimal_places
(zolang beide zijn opgegeven):
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'
Deze fout treedt ook op voor strikte velden wanneer de invoerwaarde geen exemplaar van Decimal
is.
dict_type
¶
Deze fout treedt op als het type van de invoerwaarde geen dict
is voor een dict
:
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
¶
Deze fout treedt op als de invoerwaarde niet bestaat in de leden van een enum
:
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
¶
Deze fout treedt op als de invoerwaarde extra velden bevat, maar 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'
Meer over de extra
configuratie kunt u lezen in de sectie Extra Attributes.
finite_number
¶
Deze fout treedt op wanneer de waarde oneindig is, of te groot om tijdens de validatie te worden weergegeven als een 64-bits drijvende-kommagetal:
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
¶
Deze fout treedt op als de waarde een tekenreeks is die niet als een float
kan worden geparseerd:
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
¶
Deze fout treedt op als het type van de invoerwaarde niet geldig is voor een float
-veld:
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
¶
Deze fout treedt op wanneer u probeert een waarde toe te wijzen aan een veld met frozen=True
, of een dergelijk veld probeert te verwijderen:
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
¶
Deze fout treedt op wanneer model_config['frozen] == True
en u probeert een van de velden te verwijderen of een nieuwe waarde toe te wijzen:
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
¶
Deze fout treedt op als het type van de invoerwaarde niet geldig is voor een frozenset
:
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
¶
Deze fout treedt op wanneer model_config['from_attributes'] == True
en er treedt een fout op tijdens het lezen van de attributen:
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
¶
Deze fout treedt op als de waarde niet groter is dan de gt
beperking van het veld:
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
¶
Deze fout treedt op als de waarde niet groter is dan of gelijk is aan de ge
beperking van het veld:
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
¶
Deze fout treedt op wanneer u een float
waarde opgeeft voor een int
-veld:
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
¶
Deze fout treedt op wanneer de waarde niet kan worden geparseerd als int
:
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
¶
Deze fout treedt op wanneer wordt geprobeerd een Python- of JSON-waarde te parseren uit een tekenreeks buiten het maximale bereik dat Python str
tot int
-parsering toestaat:
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
¶
Deze fout treedt op als het type van de invoerwaarde niet geldig is voor een int
-veld:
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
¶
Deze fout treedt op wanneer wordt geprobeerd een dict
te valideren dat een sleutel heeft die geen exemplaar is van str
:
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
¶
Deze fout treedt op als de invoerwaarde geen exemplaar van het verwachte type is:
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
¶
Deze fout treedt op als de invoerwaarde geen subklasse van het verwachte type is:
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
¶
Deze fout treedt op als de invoerwaarde niet geldig is als een Iterable
:
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
¶
Deze fout treedt op als er een fout optreedt tijdens de iteratie:
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
¶
Deze fout treedt op als de invoerwaarde geen geldige JSON-tekenreeks is:
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
¶
Deze fout treedt op als de invoerwaarde van een type is dat niet als JSON kan worden geparseerd:
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
¶
Deze fout treedt op als de invoerwaarde niet kleiner is dan de lt
beperking van het veld:
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
¶
Deze fout treedt op als de invoerwaarde niet kleiner is dan of gelijk is aan de le
van het veld:
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
¶
Deze fout treedt op als het type van de invoerwaarde niet geldig is voor een list
:
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
¶
Deze fout treedt op als de invoerwaarde niet een van de verwachte letterlijke waarden is:
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
¶
Deze fout treedt op wanneer er een probleem optreedt tijdens de validatie als gevolg van een fout in een aanroep van de methoden uit het Mapping
-protocol, zoals .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
¶
Deze fout treedt op als er verplichte velden ontbreken in de invoerwaarde:
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
¶
Deze fout treedt op wanneer een vereist positioneel of trefwoordargument niet wordt doorgegeven aan een functie die is ingericht met validate_call
:
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
¶
Deze fout treedt op wanneer een vereist argument voor alleen trefwoorden niet wordt doorgegeven aan een functie die is ingericht met validate_call
:
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
¶
Deze fout treedt op wanneer een vereist alleen-positioneel argument niet wordt doorgegeven aan een functie die is ingericht met validate_call
:
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
¶
Deze fout treedt op als de invoerwaarde geen geldige woordenlijst, modelinstantie of instantie is waaruit velden kunnen worden geëxtraheerd:
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
¶
Deze fout treedt op als de invoer voor een model geen exemplaar van het model of dictaat is:
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
¶
Deze fout treedt op wanneer u meerdere waarden opgeeft voor een enkel argument terwijl u een functie aanroept die is versierd met validate_call
:
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
¶
Deze fout treedt op als de invoer geen veelvoud is van de multiple_of
beperking van een veld:
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
¶
Deze fout treedt op als validate_assignment=True
in de configuratie en u probeert een waarde toe te wijzen aan een attribuut dat geen bestaand veld is:
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
¶
Deze fout treedt op als de invoerwaarde niet None
is voor een veld waarvoor None
vereist is:
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'
!!! note Deze fout kan optreden als er in uw model een naamconflict optreedt tussen een veldnaam en het type ervan. Meer specifiek zal deze fout waarschijnlijk optreden als de standaardwaarde van dat veld None
is.
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
¶
Deze fout treedt op wanneer een cyclische referentie wordt gedetecteerd:
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
¶
Deze fout treedt op als het waardetype niet geldig is voor een set
veld:
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
¶
Deze fout treedt op als de invoerwaarde niet overeenkomt met de pattern
van het veld:
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
¶
Deze fout treedt op als de waarde een exemplaar is van een strikt subtype van str
wanneer het veld strikt is:
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
¶
Deze fout treedt op als de invoerwaarde een tekenreeks is waarvan de lengte groter is dan de beperking max_length
van het veld:
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
¶
Deze fout treedt op als de invoerwaarde een tekenreeks is waarvan de lengte kleiner is dan de min_length
beperking van het veld:
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
¶
Deze fout treedt op als het type van de invoerwaarde niet geldig is voor een str
-veld:
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'
Deze fout treedt ook op voor strikte velden wanneer de invoerwaarde geen exemplaar van str
is.
string_unicode
¶
Deze fout treedt op wanneer de waarde niet kan worden geparseerd als een Unicode-tekenreeks:
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
¶
Deze fout treedt op als de invoerwaarde een tekenreeks is die niet kan worden geparseerd voor een timedelta
veld:
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
¶
Deze fout treedt op als het type van de invoerwaarde niet geldig is voor een timedelta
-veld:
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'
Deze fout treedt ook op voor strikte velden wanneer de invoerwaarde geen exemplaar van timedelta
is.
time_parsing
¶
Deze fout treedt op als de invoerwaarde een tekenreeks is die niet kan worden geparseerd voor een time
:
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
¶
Deze fout treedt op als het waardetype niet geldig is voor een time
:
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'
Deze fout treedt ook op voor strikte velden wanneer de invoerwaarde geen time
is.
timezone_aware
¶
Deze fout treedt op wanneer de datetime
waarde die is opgegeven voor een tijdzone-bewust datetime
veld geen tijdzone-informatie bevat:
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
¶
Deze fout treedt op wanneer de datetime
waarde die is opgegeven voor een tijdzone-naïef datetime
veld tijdzone-informatie bevat:
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
¶
Deze fout treedt op als de lengte van de invoerwaarde groter is dan de beperking max_length
van het veld:
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
¶
Deze fout treedt op als de waardelengte kleiner is dan de min_length
beperking van het veld:
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
¶
Deze fout treedt op als het type van de invoerwaarde niet geldig is voor een tuple
:
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'
Deze fout treedt ook op voor strikte velden wanneer de invoerwaarde geen exemplaar van tuple
is.
unexpected_keyword_argument
¶
Deze fout treedt op wanneer u een waarde per trefwoord opgeeft voor een argument dat alleen positioneel is, terwijl u een functie aanroept die is gedecoreerd met validate_call
:
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'
Het treedt ook op bij het gebruik van pydantic.dataclasses en extra=forbid
:
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
¶
Deze fout treedt op wanneer u een positionele waarde opgeeft voor een argument dat alleen uit trefwoorden bestaat, terwijl u een functie aanroept die is gedecoreerd met validate_call
:
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
¶
Deze fout treedt op als de discriminator van de invoer niet een van de verwachte waarden is:
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
¶
Deze fout treedt op als het niet mogelijk is om een discriminatorwaarde uit de invoer te extraheren:
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
¶
Deze fout treedt op wanneer de invoerwaarde niet als URL kan worden geparseerd:
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
¶
Deze fout treedt op als het URL-schema niet geldig is voor het URL-type van het veld:
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
¶
Deze fout treedt op als de URL-syntaxis niet geldig is:
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
¶
Deze fout treedt op als de URL-lengte groter is dan 2083:
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
¶
Deze fout treedt op als het type van de invoerwaarde niet geldig is voor een URL-veld:
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
¶
Deze fout treedt op als het type van de invoerwaarde niet geldig is voor een UUID-veld:
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
¶
Deze fout treedt op als het type van de invoerwaarde geen geldig exemplaar is voor een UUID-veld (str, bytes of UUID):
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
¶
Deze fout treedt op als het type van de invoerwaarde niet overeenkomt met de UUID-versie:
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
¶
Deze fout treedt op wanneer er tijdens de validatie een ValueError
optreedt:
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'
本文总阅读量次