Erreurs d'utilisation
Pydantic tente de fournir des erreurs utiles. Les sections suivantes fournissent des détails sur les erreurs courantes que les développeurs peuvent rencontrer lorsqu'ils travaillent avec Pydantic, ainsi que des suggestions pour résoudre la condition d'erreur.
Classe non entièrement définie¶
Cette erreur est générée lorsqu'un type référencé dans une annotation d'un type validé par pydantic (comme une sous-classe de BaseModel
ou une dataclass
pydantic) n'est pas défini:
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'
Ou lorsque le type a été défini après utilisation :
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}})
Pour les sous-classes BaseModel, cela peut être corrigé en définissant le type puis en appelant .model_rebuild()
:
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}})
Dans d'autres cas, le message d'erreur doit indiquer comment reconstruire la classe avec le type approprié défini.
Schéma JSON personnalisé¶
La méthode __modify_schema__
n'est plus prise en charge dans la V2. Vous devez plutôt utiliser la méthode __get_pydantic_json_schema__
.
Le __modify_schema__
utilisé pour recevoir un seul argument représentant le schéma JSON. Voir l'exemple ci-dessous:
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'
La nouvelle méthode __get_pydantic_json_schema__
reçoit deux arguments: le premier est un dictionnaire noté CoreSchema
, et le second un handler
appelable qui reçoit un CoreSchema
en paramètre et renvoie un schéma JSON. Voir l'exemple ci-dessous:
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'}
"""
Décorateur sur champ manquant¶
Cette erreur est générée lorsque vous définissez un décorateur avec un champ qui n'est pas valide.
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'
Vous pouvez utiliser check_fields=False
si vous héritez du modèle et que vous le vouliez.
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)
Discriminateur sans champ¶
Cette erreur est générée lorsqu'un modèle dans des unions discriminées ne définit pas de champ discriminateur.
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'
Type d'alias du discriminateur¶
Cette erreur est générée lorsque vous définissez un alias sans chaîne sur un champ discriminateur.
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'
Le discriminateur a besoin d'un sens littéral¶
Cette erreur est générée lorsque vous définissez un type non Literal
sur un champ discriminateur.
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'
Alias du discriminateur¶
Cette erreur se produit lorsque vous définissez différents alias sur les champs discriminateurs.
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'
Validateur de discriminateur invalide¶
Cette erreur est générée lorsque vous utilisez un validateur before, wrap ou plain sur un champ discriminateur.
Ceci n'est pas autorisé car le champ discriminateur est utilisé pour déterminer le type de modèle à utiliser pour la validation. Vous ne pouvez donc pas utiliser un validateur susceptible de modifier sa valeur.
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'
Cela peut être contourné en utilisant un Union
standard, en supprimant le discriminateur:
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'
Cas de discriminateur appelable sans balise¶
Cette erreur se produit lorsqu'une Union
qui utilise un Discriminator
appelable n'a pas d'annotations Tag
pour tous les cas.
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'
Version TypedDict
¶
Cette erreur est générée lorsque vous utilisez typing.TypedDict au lieu de typing_extensions.TypedDict
sur Python < 3.12.
Champ parent du modèle remplacé¶
Cette erreur est générée lorsqu'un champ défini sur une classe de base a été remplacé par un attribut non annoté.
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'
Annotation manquante dans le champ modèle¶
Cette erreur est générée lorsqu'un champ n'a pas d'annotation.
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'
Si le champ n'est pas censé être un champ, vous pourrez peut-être résoudre l'erreur en l'annotant en tant que ClassVar
:
from typing import ClassVar
from pydantic import BaseModel
class Model(BaseModel):
a: ClassVar[str]
Ou en mettant à jour 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
et model_config
ont tous deux définis¶
Cette erreur est générée lorsque class Config
et model_config
sont utilisées ensemble.
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'
Arguments de mots clés supprimés¶
Cette erreur est générée lorsque les arguments de mots-clés ne sont pas disponibles dans Pydantic V2.
Par exemple, regex
est supprimée de 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'
Type de schéma JSON non valide¶
Cette erreur se produit lorsque Pydantic ne parvient pas à générer un schéma JSON pour certains 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'
Schéma JSON déjà utilisé¶
Cette erreur se produit lorsque le générateur de schéma JSON a déjà été utilisé pour générer un schéma JSON. Vous devez créer une nouvelle instance pour générer un nouveau schéma JSON.
BaseModel instancié¶
Cette erreur est générée lorsque vous instanciez directement BaseModel
. Les modèles Pydantic doivent hériter de BaseModel
.
from pydantic import BaseModel, PydanticUserError
try:
BaseModel()
except PydanticUserError as exc_info:
assert exc_info.code == 'base-model-instantiated'
Annotation non définie¶
Cette erreur est générée lors de la gestion d'annotations non définies lors de la génération 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'
Schéma pour type inconnu¶
Cette erreur est générée lorsque Pydantic ne parvient pas à générer un CoreSchema
pour un certain type.
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'
Erreur d'importation¶
Cette erreur se produit lorsque vous essayez d'importer un objet qui était disponible dans Pydantic V1, mais qui a été supprimé dans Pydantic V2.
Consultez le Guide de migration pour plus d'informations.
définitions de champ create_model
¶
Cette erreur se produit lorsque vous fournissez une entrée de définitions de champ dans create_model
qui n'est pas valide.
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'
Ou lorsque vous utilisez typing.Annotated
avec une entrée invalide
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'
base de configuration create_model
¶
Cette erreur se produit lorsque vous utilisez à la fois __config__
et __base__
dans 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'
Validateur sans champs¶
Cette erreur se produit lorsque vous utilisez le validateur nu (sans champs).
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'
Les validateurs doivent être utilisés avec des champs et des arguments de mots clés.
from pydantic import BaseModel, field_validator
class Model(BaseModel):
a: str
@field_validator('a')
def checker(cls, v):
return v
Champs de validation invalides¶
Cette erreur est générée lorsque vous utilisez un validateur avec des champs autres que des chaînes.
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'
Les champs doivent être transmis sous forme d'arguments de chaîne distincts:
from pydantic import BaseModel, field_validator
class Model(BaseModel):
a: str
b: str
@field_validator('a', 'b')
def check_fields(cls, v):
return v
Validateur sur la méthode d'instance¶
Cette erreur est générée lorsque vous appliquez un validateur sur une méthode d'instance.
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'
Validateur racine, pre
, skip_on_failure
¶
Si vous utilisez @root_validator
avec pre=False
(valeur par défaut), vous DEVEZ spécifier skip_on_failure=True
. L'option skip_on_failure=False
n'est plus disponible.
Si vous n'essayiez pas de définir skip_on_failure=False
, vous pouvez définir en toute sécurité skip_on_failure=True
. Si vous le faites, ce validateur racine ne sera plus appelé si la validation échoue pour l'un des champs.
Veuillez consulter le Guide de migration pour plus de détails.
méthodes d'instance model_serializer
¶
@model_serializer
doit être appliqué aux méthodes d'instance.
Cette erreur est générée lorsque vous appliquez model_serializer
sur une méthode d'instance sans 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'
Ou sur une méthode de classe:
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
et info
¶
Les paramètres field
et config
ne sont pas disponibles dans Pydantic V2. Veuillez utiliser le paramètre info
à la place.
Vous pouvez accéder à la configuration via info.config
, mais il s'agit d'un dictionnaire au lieu d'un objet comme c'était le cas dans Pydantic V1.
L'argument field
n'est plus disponible.
Signature du validateur Pydantic V1¶
Cette erreur se produit lorsque vous utilisez une signature non prise en charge pour le validateur de style Pydantic V1.
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'
Signature field_validator
non reconnue¶
Cette erreur est générée lorsqu'une fonction field_validator
ou model_validator
a la mauvaise signature.
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'
Signature field_serializer
non reconnue¶
Cette erreur est générée lorsque la fonction field_serializer
a la mauvaise signature.
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'
Les signatures valides du sérialiseur sont:
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): ...
Signature model_serializer
non reconnue¶
Cette erreur est générée lorsque la fonction model_serializer
a la mauvaise signature.
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'
Sérialiseurs de champs multiples¶
Cette erreur est générée lorsque plusieurs fonctions model_serializer
sont définies pour un champ.
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'
Type annoté invalide¶
Cette erreur est générée lorsqu'une annotation ne peut pas annoter un type.
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
n'est pas utilisée avec TypeAdapter
¶
Vous obtiendrez cette erreur si vous essayez de transmettre config
à TypeAdapter
lorsque le type est un type qui a sa propre configuration qui ne peut pas être remplacée (actuellement, il s'agit uniquement BaseModel
, TypedDict
et 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'
Au lieu de cela, vous devrez sous-classer le type et remplacer ou définir la configuration dessus:
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
Impossible de spécifier model_config['extra']
avec RootModel
¶
Parce que RootModel
n'est pas capable de stocker ou même d'accepter des champs supplémentaires lors de l'initialisation, nous générons une erreur si vous essayez de spécifier une valeur pour le paramètre de configuration 'extra'
lors de la création d'une sous-classe de 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'
Impossible d'évaluer l'annotation de type¶
Étant donné que les annotations de type sont évaluées après les affectations, vous pouvez obtenir des résultats inattendus lorsque vous utilisez un nom d'annotation de type qui entre en conflit avec l'un de vos champs. Nous remontons une erreur dans le cas suivant :
from datetime import date
from pydantic import BaseModel, Field
class Model(BaseModel):
date: date = Field(description='A date')
Pour contourner le problème, vous pouvez soit utiliser un alias, soit modifier votre importation:
import datetime
# Or `from datetime import date as _date`
from pydantic import BaseModel, Field
class Model(BaseModel):
date: datetime.date = Field(description='A date')
init
dataclass
incompatible et paramètres extra
¶
Pydantic n'autorise pas la spécification du paramètre extra='allow'
sur une classe de données alors que l'un des champs a init=False
défini.
Ainsi, vous ne pouvez pas faire quelque chose comme ce qui suit:
from pydantic import ConfigDict, Field
from pydantic.dataclasses import dataclass
@dataclass(config=ConfigDict(extra='allow'))
class A:
a: int = Field(init=False, default=1)
L'extrait ci-dessus entraîne l'erreur suivante lors de la création du schéma pour la classe de données A
:
pydantic.errors.PydanticUserError: Field a has `init=False` and dataclass has config setting `extra="allow"`.
This combination is not allowed.
Paramètres init
et init_var
incompatibles sur le champ dataclass
¶
Les paramètres init=False
et init_var=True
s'excluent mutuellement. Cela entraîne l’ PydanticUserError
indiquée dans l’exemple ci-dessous.
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
est utilisé comme champ de modèle¶
Cette erreur est générée lorsque model_config
est utilisé comme nom d'un champ.
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
est utilisé sur une sous-classe BaseModel
¶
Cette erreur est générée lorsque le décorateur with_config
est utilisé sur une classe qui est déjà un modèle Pydantic (utilisez plutôt l'attribut 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
est utilisé sur une sous-classe BaseModel
¶
Cette erreur est générée lorsque le décorateur dataclass
Pydantic est utilisé sur une classe qui est déjà un modèle Pydantic.
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'
本文总阅读量次