Gebruikfouten
Pydantic probeert nuttige fouten te bieden. De volgende secties geven details over veelvoorkomende fouten die ontwikkelaars kunnen tegenkomen bij het werken met Pydantic, samen met suggesties voor het aanpakken van de foutconditie.
Klasse niet volledig gedefinieerd¶
Deze fout treedt op wanneer een type waarnaar wordt verwezen in een annotatie van een pydantic-gevalideerd type (zoals een subklasse van BaseModel
of een pydantic dataclass
) niet is gedefinieerd:
from typing import ForwardRef
from pydantic import BaseModel, PydanticUserError
UndefinedType = ForwardRef('UndefinedType')
class Foobar(BaseModel):
a: UndefinedType
try:
Foobar(a=1)
except PydanticUserError as exc_info:
assert exc_info.code == 'class-not-fully-defined'
Of wanneer het type na gebruik is gedefinieerd:
from typing import Optional
from pydantic import BaseModel, PydanticUserError
class Foo(BaseModel):
a: Optional['Bar'] = None
try:
# this doesn't work, see raised error
foo = Foo(a={'b': {'a': None}})
except PydanticUserError as exc_info:
assert exc_info.code == 'class-not-fully-defined'
class Bar(BaseModel):
b: 'Foo'
# this works, though
foo = Foo(a={'b': {'a': None}})
Voor BaseModel-subklassen kan dit worden opgelost door het type te definiëren en vervolgens .model_rebuild()
aan te roepen:
from typing import Optional
from pydantic import BaseModel
class Foo(BaseModel):
a: Optional['Bar'] = None
class Bar(BaseModel):
b: 'Foo'
Foo.model_rebuild()
foo = Foo(a={'b': {'a': None}})
In andere gevallen moet het foutbericht aangeven hoe de klasse opnieuw moet worden opgebouwd met het juiste gedefinieerde type.
Aangepast JSON-schema¶
De methode __modify_schema__
wordt niet langer ondersteund in V2. U moet in plaats daarvan de methode __get_pydantic_json_schema__
gebruiken.
Het __modify_schema__
wordt gebruikt om één argument te ontvangen dat het JSON-schema vertegenwoordigt. Zie het onderstaande voorbeeld:
from pydantic import BaseModel, PydanticUserError
try:
class Model(BaseModel):
@classmethod
def __modify_schema__(cls, field_schema):
field_schema.update(examples='examples')
except PydanticUserError as exc_info:
assert exc_info.code == 'custom-json-schema'
De nieuwe methode __get_pydantic_json_schema__
ontvangt twee argumenten: de eerste is een woordenboek dat wordt aangeduid als CoreSchema
, en de tweede een opvraagbare handler
die een CoreSchema
als parameter ontvangt en een JSON-schema retourneert. Zie het onderstaande voorbeeld:
from typing import Any, Dict
from pydantic_core import CoreSchema
from pydantic import BaseModel, GetJsonSchemaHandler
class Model(BaseModel):
@classmethod
def __get_pydantic_json_schema__(
cls, core_schema: CoreSchema, handler: GetJsonSchemaHandler
) -> Dict[str, Any]:
json_schema = super().__get_pydantic_json_schema__(core_schema, handler)
json_schema = handler.resolve_ref_schema(json_schema)
json_schema.update(examples='examples')
return json_schema
print(Model.model_json_schema())
"""
{'examples': 'examples', 'properties': {}, 'title': 'Model', 'type': 'object'}
"""
Decorateur op ontbrekend veld¶
Deze fout treedt op wanneer u een decorateur definieert met een veld dat niet geldig is.
from typing import Any
from pydantic import BaseModel, PydanticUserError, field_validator
try:
class Model(BaseModel):
a: str
@field_validator('b')
def check_b(cls, v: Any):
return v
except PydanticUserError as exc_info:
assert exc_info.code == 'decorator-missing-field'
U kunt check_fields=False
gebruiken als u van het model overerft en dit heeft bedoeld.
from typing import Any
from pydantic import BaseModel, create_model, field_validator
class Model(BaseModel):
@field_validator('a', check_fields=False)
def check_a(cls, v: Any):
return v
model = create_model('FooModel', a=(str, 'cake'), __base__=Model)
Discriminator geen veld¶
Deze fout treedt op wanneer een model in gediscrimineerde vakbonden geen discriminatorveld definieert.
from typing import Union
from typing_extensions import Literal
from pydantic import BaseModel, Field, PydanticUserError
class Cat(BaseModel):
c: str
class Dog(BaseModel):
pet_type: Literal['dog']
d: str
try:
class Model(BaseModel):
pet: Union[Cat, Dog] = Field(..., discriminator='pet_type')
number: int
except PydanticUserError as exc_info:
assert exc_info.code == 'discriminator-no-field'
Discriminator-aliastype¶
Deze fout treedt op wanneer u een niet-tekenreeksalias definieert in een discriminatorveld.
from typing import Union
from typing_extensions import Literal
from pydantic import AliasChoices, BaseModel, Field, PydanticUserError
class Cat(BaseModel):
pet_type: Literal['cat'] = Field(
validation_alias=AliasChoices('Pet', 'PET')
)
c: str
class Dog(BaseModel):
pet_type: Literal['dog']
d: str
try:
class Model(BaseModel):
pet: Union[Cat, Dog] = Field(..., discriminator='pet_type')
number: int
except PydanticUserError as exc_info:
assert exc_info.code == 'discriminator-alias-type'
Discriminator heeft letterlijke behoeften¶
Deze fout treedt op wanneer u een niet- Literal
type definieert in een discriminatorveld.
from typing import Union
from typing_extensions import Literal
from pydantic import BaseModel, Field, PydanticUserError
class Cat(BaseModel):
pet_type: int
c: str
class Dog(BaseModel):
pet_type: Literal['dog']
d: str
try:
class Model(BaseModel):
pet: Union[Cat, Dog] = Field(..., discriminator='pet_type')
number: int
except PydanticUserError as exc_info:
assert exc_info.code == 'discriminator-needs-literal'
Discriminator-alias¶
Deze fout treedt op wanneer u verschillende aliassen definieert voor discriminatorvelden.
from typing import Union
from typing_extensions import Literal
from pydantic import BaseModel, Field, PydanticUserError
class Cat(BaseModel):
pet_type: Literal['cat'] = Field(validation_alias='PET')
c: str
class Dog(BaseModel):
pet_type: Literal['dog'] = Field(validation_alias='Pet')
d: str
try:
class Model(BaseModel):
pet: Union[Cat, Dog] = Field(..., discriminator='pet_type')
number: int
except PydanticUserError as exc_info:
assert exc_info.code == 'discriminator-alias'
Ongeldige discriminatorvalidator¶
Deze fout treedt op als u een before-, wrap- of plain-validator op een discriminatorveld gebruikt.
Dit is niet toegestaan omdat het discriminatorveld wordt gebruikt om het type model te bepalen dat voor validatie moet worden gebruikt. U kunt dus geen validator gebruiken die de waarde ervan zou kunnen veranderen.
from typing import Union
from typing_extensions import Literal
from pydantic import BaseModel, Field, PydanticUserError, field_validator
class Cat(BaseModel):
pet_type: Literal['cat']
@field_validator('pet_type', mode='before')
@classmethod
def validate_pet_type(cls, v):
if v == 'kitten':
return 'cat'
return v
class Dog(BaseModel):
pet_type: Literal['dog']
try:
class Model(BaseModel):
pet: Union[Cat, Dog] = Field(..., discriminator='pet_type')
number: int
except PydanticUserError as exc_info:
assert exc_info.code == 'discriminator-validator'
Dit kan worden omzeild door een standaard Union
te gebruiken en de discriminator te laten vallen:
from typing import Union
from typing_extensions import Literal
from pydantic import BaseModel, field_validator
class Cat(BaseModel):
pet_type: Literal['cat']
@field_validator('pet_type', mode='before')
@classmethod
def validate_pet_type(cls, v):
if v == 'kitten':
return 'cat'
return v
class Dog(BaseModel):
pet_type: Literal['dog']
class Model(BaseModel):
pet: Union[Cat, Dog]
assert Model(pet={'pet_type': 'kitten'}).pet.pet_type == 'cat'
Oproepbare discriminatorbehuizing zonder tag¶
Deze fout treedt op wanneer een Union
die een opvraagbare Discriminator
gebruikt, niet voor alle gevallen Tag
annotaties heeft.
from typing import Union
from typing_extensions import Annotated
from pydantic import BaseModel, Discriminator, PydanticUserError, Tag
def model_x_discriminator(v):
if isinstance(v, str):
return 'str'
if isinstance(v, (dict, BaseModel)):
return 'model'
# tag missing for both union choices
try:
class DiscriminatedModel(BaseModel):
x: Annotated[
Union[str, 'DiscriminatedModel'],
Discriminator(model_x_discriminator),
]
except PydanticUserError as exc_info:
assert exc_info.code == 'callable-discriminator-no-tag'
# tag missing for `'DiscriminatedModel'` union choice
try:
class DiscriminatedModel(BaseModel):
x: Annotated[
Union[Annotated[str, Tag('str')], 'DiscriminatedModel'],
Discriminator(model_x_discriminator),
]
except PydanticUserError as exc_info:
assert exc_info.code == 'callable-discriminator-no-tag'
# tag missing for `str` union choice
try:
class DiscriminatedModel(BaseModel):
x: Annotated[
Union[str, Annotated['DiscriminatedModel', Tag('model')]],
Discriminator(model_x_discriminator),
]
except PydanticUserError as exc_info:
assert exc_info.code == 'callable-discriminator-no-tag'
TypedDict
-versie¶
Deze fout treedt op wanneer u typing.TypedDict gebruikt in plaats van typing_extensions.TypedDict
in Python < 3.12.
Bovenliggend modelveld overschreven¶
Deze fout treedt op wanneer een veld dat op een basisklasse is gedefinieerd, wordt overschreven door een niet-geannoteerd attribuut.
from pydantic import BaseModel, PydanticUserError
class Foo(BaseModel):
a: float
try:
class Bar(Foo):
x: float = 12.3
a = 123.0
except PydanticUserError as exc_info:
assert exc_info.code == 'model-field-overridden'
Ontbrekende annotatie in modelveld¶
Deze fout treedt op als een veld geen annotatie heeft.
from pydantic import BaseModel, Field, PydanticUserError
try:
class Model(BaseModel):
a = Field('foobar')
b = None
except PydanticUserError as exc_info:
assert exc_info.code == 'model-field-missing-annotation'
Als het veld niet bedoeld is als veld, kunt u de fout mogelijk oplossen door het te annoteren als een ClassVar
:
from typing import ClassVar
from pydantic import BaseModel
class Model(BaseModel):
a: ClassVar[str]
Of update model_config['ignored_types']
:
from pydantic import BaseModel, ConfigDict
class IgnoredType:
pass
class MyModel(BaseModel):
model_config = ConfigDict(ignored_types=(IgnoredType,))
_a = IgnoredType()
_b: int = IgnoredType()
_c: IgnoredType
_d: IgnoredType = IgnoredType()
Config
en model_config
zijn beide gedefinieerd¶
Deze fout treedt op wanneer class Config
en model_config
samen worden gebruikt.
from pydantic import BaseModel, ConfigDict, PydanticUserError
try:
class Model(BaseModel):
model_config = ConfigDict(from_attributes=True)
a: str
class Config:
from_attributes = True
except PydanticUserError as exc_info:
assert exc_info.code == 'config-both'
Zoekwoordargumenten verwijderd¶
Deze fout treedt op wanneer de trefwoordargumenten niet beschikbaar zijn in Pydantic V2.
regex
wordt bijvoorbeeld verwijderd uit Pydantic V2:
from pydantic import BaseModel, Field, PydanticUserError
try:
class Model(BaseModel):
x: str = Field(regex='test')
except PydanticUserError as exc_info:
assert exc_info.code == 'removed-kwargs'
JSON-schema ongeldig type¶
Deze fout treedt op wanneer Pydantic er niet in slaagt een JSON-schema te genereren voor een bepaald CoreSchema
.
from pydantic import BaseModel, ImportString, PydanticUserError
class Model(BaseModel):
a: ImportString
try:
Model.model_json_schema()
except PydanticUserError as exc_info:
assert exc_info.code == 'invalid-for-json-schema'
JSON-schema al gebruikt¶
Deze fout treedt op wanneer de JSON-schemagenerator al is gebruikt om een JSON-schema te genereren. U moet een nieuw exemplaar maken om een nieuw JSON-schema te genereren.
BaseModel geïnstantieerd¶
Deze fout treedt op wanneer u BaseModel
rechtstreeks instantieert. Pydantic-modellen moeten overerven van BaseModel
.
from pydantic import BaseModel, PydanticUserError
try:
BaseModel()
except PydanticUserError as exc_info:
assert exc_info.code == 'base-model-instantiated'
Ongedefinieerde annotatie¶
Deze fout treedt op bij het verwerken van ongedefinieerde annotaties tijdens het genereren van CoreSchema
.
from pydantic import BaseModel, PydanticUndefinedAnnotation
class Model(BaseModel):
a: 'B' # noqa F821
try:
Model.model_rebuild()
except PydanticUndefinedAnnotation as exc_info:
assert exc_info.code == 'undefined-annotation'
Schema voor onbekend type¶
Deze fout treedt op wanneer Pydantic er niet in slaagt een CoreSchema
voor een bepaald type te genereren.
from pydantic import BaseModel, PydanticUserError
try:
class Model(BaseModel):
x: 43 = 123
except PydanticUserError as exc_info:
assert exc_info.code == 'schema-for-unknown-type'
Importfout¶
Deze fout treedt op wanneer u een object probeert te importeren dat beschikbaar was in Pydantic V1, maar is verwijderd in Pydantic V2.
Zie de Migratiehandleiding voor meer informatie.
create_model
velddefinities¶
Deze fout treedt op wanneer u velddefinities invoert in create_model
die niet geldig zijn.
from pydantic import PydanticUserError, create_model
try:
create_model('FooModel', foo=(str, 'default value', 'more'))
except PydanticUserError as exc_info:
assert exc_info.code == 'create-model-field-definitions'
Of wanneer u typing.Annotated
gebruikt met ongeldige invoer
from typing_extensions import Annotated
from pydantic import PydanticUserError, create_model
try:
create_model('FooModel', foo=Annotated[str, 'NotFieldInfoValue'])
except PydanticUserError as exc_info:
assert exc_info.code == 'create-model-field-definitions'
create_model
configuratiebasis¶
Deze fout treedt op als u zowel __config__
als __base__
samen gebruikt in create_model
.
from pydantic import BaseModel, ConfigDict, PydanticUserError, create_model
try:
config = ConfigDict(frozen=True)
model = create_model(
'FooModel', foo=(int, ...), __config__=config, __base__=BaseModel
)
except PydanticUserError as exc_info:
assert exc_info.code == 'create-model-config-base'
Validator zonder velden¶
Deze fout treedt op als u validator bare gebruikt (zonder velden).
from pydantic import BaseModel, PydanticUserError, field_validator
try:
class Model(BaseModel):
a: str
@field_validator
def checker(cls, v):
return v
except PydanticUserError as exc_info:
assert exc_info.code == 'validator-no-fields'
Validators moeten worden gebruikt met velden en trefwoordargumenten.
from pydantic import BaseModel, field_validator
class Model(BaseModel):
a: str
@field_validator('a')
def checker(cls, v):
return v
Ongeldige validatorvelden¶
Deze fout treedt op wanneer u een validator gebruikt met niet-tekenreeksvelden.
from pydantic import BaseModel, PydanticUserError, field_validator
try:
class Model(BaseModel):
a: str
b: str
@field_validator(['a', 'b'])
def check_fields(cls, v):
return v
except PydanticUserError as exc_info:
assert exc_info.code == 'validator-invalid-fields'
Velden moeten als afzonderlijke stringargumenten worden doorgegeven:
from pydantic import BaseModel, field_validator
class Model(BaseModel):
a: str
b: str
@field_validator('a', 'b')
def check_fields(cls, v):
return v
Validator op instantiemethode¶
Deze fout treedt op wanneer u een validator op een instantiemethode toepast.
from pydantic import BaseModel, PydanticUserError, field_validator
try:
class Model(BaseModel):
a: int = 1
@field_validator('a')
def check_a(self, values):
return values
except PydanticUserError as exc_info:
assert exc_info.code == 'validator-instance-method'
Rootvalidator, pre
, skip_on_failure
¶
Als u @root_validator
gebruikt met pre=False
(de standaardinstelling), MOET u skip_on_failure=True
opgeven. De skip_on_failure=False
optie is niet langer beschikbaar.
Als u niet probeerde skip_on_failure=False
in te stellen, kunt u veilig skip_on_failure=True
instellen. Als u dit doet, wordt deze rootvalidator niet langer aangeroepen als de validatie voor een van de velden mislukt.
Raadpleeg de Migratiehandleiding voor meer informatie.
model_serializer
instantiemethoden¶
@model_serializer
moet worden toegepast op instantiemethoden.
Deze fout treedt op wanneer u model_serializer
toepast op een instantiemethode zonder self
:
from pydantic import BaseModel, PydanticUserError, model_serializer
try:
class MyModel(BaseModel):
a: int
@model_serializer
def _serialize(slf, x, y, z):
return slf
except PydanticUserError as exc_info:
assert exc_info.code == 'model-serializer-instance-method'
Of op een klassenmethode:
from pydantic import BaseModel, PydanticUserError, model_serializer
try:
class MyModel(BaseModel):
a: int
@model_serializer
@classmethod
def _serialize(self, x, y, z):
return self
except PydanticUserError as exc_info:
assert exc_info.code == 'model-serializer-instance-method'
validator
, field
, config
en info
¶
De field
en config
zijn niet beschikbaar in Pydantic V2. Gebruik in plaats daarvan de info
parameter.
Je hebt toegang tot de configuratie via info.config
, maar het is een woordenboek in plaats van een object zoals in Pydantic V1.
Het field
is niet langer beschikbaar.
Pydantic V1-validatorhandtekening¶
Deze fout treedt op wanneer u een niet-ondersteunde handtekening gebruikt voor de validator in Pydantic V1-stijl.
import warnings
from pydantic import BaseModel, PydanticUserError, validator
warnings.filterwarnings('ignore', category=DeprecationWarning)
try:
class Model(BaseModel):
a: int
@validator('a')
def check_a(cls, value, foo):
return value
except PydanticUserError as exc_info:
assert exc_info.code == 'validator-v1-signature'
Niet-herkende field_validator
handtekening¶
Deze fout treedt op wanneer een field_validator
of model_validator
functie de verkeerde handtekening heeft.
from pydantic import BaseModel, PydanticUserError, field_validator
try:
class Model(BaseModel):
a: str
@field_validator('a')
@classmethod
def check_a(cls):
return 'a'
except PydanticUserError as exc_info:
assert exc_info.code == 'validator-signature'
Niet-herkende field_serializer
handtekening¶
Deze fout treedt op wanneer de field_serializer
-functie de verkeerde handtekening heeft.
from pydantic import BaseModel, PydanticUserError, field_serializer
try:
class Model(BaseModel):
x: int
@field_serializer('x')
def no_args():
return 'x'
except PydanticUserError as exc_info:
assert exc_info.code == 'field-serializer-signature'
Geldige serialisatiehandtekeningen zijn:
from pydantic import model_serializer
# an instance method with the default mode or `mode='plain'`
@model_serializer('x') # or @serialize('x', mode='plain')
def ser_x(self, value: Any, info: pydantic.FieldSerializationInfo): ...
# a static method or free-standing function with the default mode or `mode='plain'`
@model_serializer('x') # or @serialize('x', mode='plain')
@staticmethod
def ser_x(value: Any, info: pydantic.FieldSerializationInfo): ...
# equivalent to
def ser_x(value: Any, info: pydantic.FieldSerializationInfo): ...
serializer('x')(ser_x)
# an instance method with `mode='wrap'`
@model_serializer('x', mode='wrap')
def ser_x(self, value: Any, nxt: pydantic.SerializerFunctionWrapHandler, info: pydantic.FieldSerializationInfo): ...
# a static method or free-standing function with `mode='wrap'`
@model_serializer('x', mode='wrap')
@staticmethod
def ser_x(value: Any, nxt: pydantic.SerializerFunctionWrapHandler, info: pydantic.FieldSerializationInfo): ...
# equivalent to
def ser_x(value: Any, nxt: pydantic.SerializerFunctionWrapHandler, info: pydantic.FieldSerializationInfo): ...
serializer('x')(ser_x)
For all of these, you can also choose to omit the `info` argument, for example:
@model_serializer('x')
def ser_x(self, value: Any): ...
@model_serializer('x', mode='wrap')
def ser_x(self, value: Any, handler: pydantic.SerializerFunctionWrapHandler): ...
Niet-herkende model_serializer
handtekening¶
Deze fout treedt op wanneer de functie model_serializer
de verkeerde handtekening heeft.
from pydantic import BaseModel, PydanticUserError, model_serializer
try:
class MyModel(BaseModel):
a: int
@model_serializer
def _serialize(self, x, y, z):
return self
except PydanticUserError as exc_info:
assert exc_info.code == 'model-serializer-signature'
Meerdere veldserializers¶
Deze fout treedt op wanneer meerdere model_serializer
functies voor een veld zijn gedefinieerd.
from pydantic import BaseModel, PydanticUserError, field_serializer
try:
class MyModel(BaseModel):
x: int
y: int
@field_serializer('x', 'y')
def serializer1(v):
return f'{v:,}'
@field_serializer('x')
def serializer2(v):
return v
except PydanticUserError as exc_info:
assert exc_info.code == 'multiple-field-serializers'
Ongeldig geannoteerd type¶
Deze fout treedt op wanneer een annotatie een type niet kan annoteren.
from typing_extensions import Annotated
from pydantic import BaseModel, FutureDate, PydanticUserError
try:
class Model(BaseModel):
foo: Annotated[str, FutureDate()]
except PydanticUserError as exc_info:
assert exc_info.code == 'invalid-annotated-type'
config
is ongebruikt met TypeAdapter
¶
U krijgt deze foutmelding als u config
probeert door te geven aan TypeAdapter
wanneer het type een type is dat zijn eigen configuratie heeft die niet kan worden overschreven (momenteel zijn dit alleen BaseModel
, TypedDict
en dataclass
):
from typing_extensions import TypedDict
from pydantic import ConfigDict, PydanticUserError, TypeAdapter
class MyTypedDict(TypedDict):
x: int
try:
TypeAdapter(MyTypedDict, config=ConfigDict(strict=True))
except PydanticUserError as exc_info:
assert exc_info.code == 'type-adapter-config-unused'
In plaats daarvan moet u het type subclassificeren en de configuratie ervan overschrijven of instellen:
from typing_extensions import TypedDict
from pydantic import ConfigDict, TypeAdapter
class MyTypedDict(TypedDict):
x: int
# or `model_config = ...` for BaseModel
__pydantic_config__ = ConfigDict(strict=True)
TypeAdapter(MyTypedDict) # ok
Kan model_config['extra']
niet opgeven met RootModel
¶
Omdat RootModel
niet in staat is om extra velden op te slaan of zelfs maar te accepteren tijdens de initialisatie, geven we een foutmelding als u probeert een waarde op te geven voor de configuratie-instelling 'extra'
bij het maken van een subklasse van RootModel
:
from pydantic import PydanticUserError, RootModel
try:
class MyRootModel(RootModel):
model_config = {'extra': 'allow'}
root: int
except PydanticUserError as exc_info:
assert exc_info.code == 'root-model-extra'
Kan typeannotatie niet evalueren¶
Omdat typeannotaties worden geëvalueerd na toewijzingen, kunt u onverwachte resultaten krijgen als u een typeannotatienaam gebruikt die conflicteert met een van uw velden. We genereren een fout in het volgende geval:
from datetime import date
from pydantic import BaseModel, Field
class Model(BaseModel):
date: date = Field(description='A date')
Als tijdelijke oplossing kunt u een alias gebruiken of uw import wijzigen:
import datetime
# Or `from datetime import date as _date`
from pydantic import BaseModel, Field
class Model(BaseModel):
date: datetime.date = Field(description='A date')
Incompatibele dataclass
init
en extra
instellingen¶
Pydantic staat de specificatie van de extra='allow'
instelling voor een dataklasse niet toe, terwijl voor een van de velden init=False
is ingesteld.
U mag dus niet het volgende doen:
from pydantic import ConfigDict, Field
from pydantic.dataclasses import dataclass
@dataclass(config=ConfigDict(extra='allow'))
class A:
a: int = Field(init=False, default=1)
Het bovenstaande fragment resulteert in de volgende fout tijdens het bouwen van een schema voor de A
-dataklasse:
pydantic.errors.PydanticUserError: Field a has `init=False` and dataclass has config setting `extra="allow"`.
This combination is not allowed.
Incompatibele init
en init_var
instellingen voor dataclass
-veld¶
De instellingen init=False
en init_var=True
sluiten elkaar uit. Als u dit wel doet, resulteert dit in de PydanticUserError
die in het onderstaande voorbeeld wordt weergegeven.
from pydantic import Field
from pydantic.dataclasses import dataclass
@dataclass
class Foo:
bar: str = Field(..., init=False, init_var=True)
"""
pydantic.errors.PydanticUserError: Dataclass field bar has init=False and init_var=True, but these are mutually exclusive.
"""
model_config
wordt gebruikt als modelveld¶
Deze fout treedt op wanneer model_config
wordt gebruikt als de naam van een veld.
from pydantic import BaseModel, PydanticUserError
try:
class Model(BaseModel):
model_config: str
except PydanticUserError as exc_info:
assert exc_info.code == 'model-config-invalid-field-name'
with_config
wordt gebruikt op een BaseModel
subklasse¶
Deze fout treedt op wanneer de decorateur with_config
wordt gebruikt op een klasse die al een Pydantic-model is (gebruik in plaats daarvan het kenmerk model_config
).
from pydantic import BaseModel, PydanticUserError, with_config
try:
@with_config({'allow_inf_nan': True})
class Model(BaseModel):
bar: str
except PydanticUserError as exc_info:
assert exc_info.code == 'with-config-on-model'
dataclass
wordt gebruikt op een BaseModel
subklasse¶
Deze fout treedt op wanneer de Pydantic dataclass
decorator wordt gebruikt op een klasse die al een Pydantic-model is.
from pydantic import BaseModel, PydanticUserError
from pydantic.dataclasses import dataclass
try:
@dataclass
class Model(BaseModel):
bar: str
except PydanticUserError as exc_info:
assert exc_info.code == 'dataclass-on-model'
本文总阅读量次