使用エラー
Pydantic は有用なエラーを提供しようとします。次のセクションでは、開発者が Pydantic を使用するときに遭遇する可能性のある一般的なエラーの詳細と、エラー状態に対処するための提案を示します。
Class not fully defined¶
このエラーは、pydantic で検証された型 ( BaseModel
のサブクラスや pydantic dataclass
など) のアノテーションで参照される型が定義されていない場合に発生します。
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'
または、使用後に型が定義されている場合:
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}})
BaseModel サブクラスの場合、型を定義してから.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}})
他の場合には、エラー メッセージには、適切な型が定義されたクラスを再構築する方法が示されます。
カスタム JSON スキーマ¶
__modify_schema__
メソッドは V2 ではサポートされなくなりました。代わりに__get_pydantic_json_schema__
メソッドを使用する必要があります。
__modify_schema__
は、JSON スキーマを表す単一の引数を受け取るために使用されます。以下の例を参照してください。
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'
新しいメソッド__get_pydantic_json_schema__
2 つの引数を受け取ります。1 つ目はCoreSchema
として示される辞書で、2 つ目はCoreSchema
パラメータとして受け取り、JSON スキーマを返す呼び出し可能なhandler
です。以下の例を参照してください。
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'}
"""
欠落フィールドのデコレータ¶
このエラーは、無効なフィールドを使用してデコレーターを定義すると発生します。
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'
モデルから継承しており、これを意図している場合は、 check_fields=False
を使用できます。
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)
識別子フィールドなし¶
このエラーは、識別共用体のモデルが識別子フィールドを定義していない場合に発生します。
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 alias type¶
このエラーは、識別子フィールドに文字列以外のエイリアスを定義すると発生します。
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 にはリテラルが必要です¶
このエラーは、識別子フィールドに非Literal
型を定義すると発生します。
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'
識別子エイリアス¶
このエラーは、識別子フィールドに異なるエイリアスを定義すると発生します。
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'
無効な識別子バリデータ¶
このエラーは、識別子フィールドで before、wrap、または plain バリデータを使用すると発生します。
識別子フィールドは検証に使用するモデルのタイプを決定するために使用されるため、これは許可されません。そのため、その値を変更する可能性のあるバリデーターは使用できません。
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'
これは、標準のUnion
使用して識別子を削除することで回避できます。
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'
タグなしの呼び出し可能な識別子ケース¶
このエラーは、呼び出し可能なDiscriminator
使用するUnion
すべてのケースでTag
アノテーションがない場合に発生します。
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
バージョン¶
このエラーは、Python 3.12 未満でtyping_extensions.TypedDict
の代わりに typing.TypedDict を使用すると発生します。
モデルの親フィールドがオーバーライドされました¶
このエラーは、基本クラスで定義されたフィールドが注釈のない属性によってオーバーライドされた場合に発生します。
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'
モデル フィールドに注釈がありません¶
このエラーは、フィールドに注釈がない場合に発生します。
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'
フィールドがフィールドであることを意図していない場合は、そのフィールドにClassVar
として注釈を付けることでエラーを解決できる可能性があります。
from typing import ClassVar
from pydantic import BaseModel
class Model(BaseModel):
a: ClassVar[str]
または、 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
とmodel_config
両方とも {#config-both} を定義しました¶
このエラーは、 class Config
とmodel_config
が一緒に使用される場合に発生します。
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'
キーワード引数が削除されました¶
このエラーは、キーワード引数が Pydantic V2 で使用できない場合に発生します。
たとえば、 regex
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 スキーマの型が無効です¶
このエラーは、Pydantic が一部のCoreSchema
の JSON スキーマの生成に失敗した場合に発生します。
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 already used¶
このエラーは、JSON スキーマ ジェネレーターがすでに JSON スキーマの生成に使用されている場合に発生します。新しい JSON スキーマを生成するには、新しいインスタンスを作成する必要があります。
BaseModel がインスタンス化されました¶
このエラーは、 BaseModel
直接インスタンス化すると発生します。 Pydantic モデルはBaseModel
から継承する必要があります。
from pydantic import BaseModel, PydanticUserError
try:
BaseModel()
except PydanticUserError as exc_info:
assert exc_info.code == 'base-model-instantiated'
未定義のアノテーション¶
このエラーは、 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 for unknown type¶
このエラーは、Pydantic があるタイプのCoreSchema
の生成に失敗した場合に発生します。
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'
インポート エラー¶
このエラーは、Pydantic V1 では使用可能だったが、Pydantic V2 では削除されたオブジェクトをインポートしようとすると発生します。
詳細については、移行ガイドを参照してください。
create_model
フィールド定義¶
このエラーは、 create_model
に無効なフィールド定義入力を指定した場合に発生します。
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'
または、無効な入力で typing.Annotated
を使用した場合
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
構成ベース¶
このエラーは、 create_model
で__config__
と__base__
両方を一緒に使用すると発生します。
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'
フィールドのないバリデータ¶
このエラーは、バリデーターを裸 (フィールドなし) で使用すると発生します。
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'
バリデータはフィールドおよびキーワード引数とともに使用する必要があります。
from pydantic import BaseModel, field_validator
class Model(BaseModel):
a: str
@field_validator('a')
def checker(cls, v):
return v
無効なバリデータフィールド¶
このエラーは、文字列以外のフィールドでバリデータを使用すると発生します。
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'
フィールドは別の文字列引数として渡す必要があります。
from pydantic import BaseModel, field_validator
class Model(BaseModel):
a: str
b: str
@field_validator('a', 'b')
def check_fields(cls, v):
return v
インスタンス メソッドのバリデータ¶
このエラーは、インスタンス メソッドにバリデータを適用すると発生します。
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'
ルートバリデータ、 pre
、 skip_on_failure
¶
@root_validator
pre=False
(デフォルト) で使用する場合は、 skip_on_failure=True
を指定する必要があります。 skip_on_failure=False
オプションは使用できなくなりました。
skip_on_failure=False
設定しようとしていない場合は、 skip_on_failure=True
を安全に設定できます。これを行うと、いずれかのフィールドの検証が失敗した場合に、このルート バリデーターは呼び出されなくなります。
詳細については、移行ガイドを参照してください。
model_serializer
インスタンス メソッド¶
@model_serializer
インスタンス メソッドに適用する必要があります。
このエラーは、 self
使用せずにインスタンス メソッドにmodel_serializer
を適用すると発生します。
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'
またはクラスメソッド上で次のようにします。
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
、およびinfo
¶
field
およびconfig
パラメータは Pydantic V2 では使用できません。代わりにinfo
パラメータを使用してください。
info.config
経由で設定にアクセスできますが、これは Pydantic V1 のようなオブジェクトではなく辞書です。
field
引数は使用できなくなりました。
Pydantic V1 バリデーター署名¶
このエラーは、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'
認識されないfield_validator
署名¶
このエラーは、 field_validator
関数またはmodel_validator
関数の署名が間違っている場合に発生します。
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'
認識されないfield_serializer
署名¶
このエラーは、 field_serializer
関数の署名が間違っている場合に発生します。
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'
有効なシリアライザー署名は次のとおりです。
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): ...
認識されないmodel_serializer
署名¶
このエラーは、 model_serializer
関数の署名が間違っている場合に発生します。
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'
複数のフィールド シリアライザー¶
このエラーは、フィールドに対して複数のmodel_serializer
関数が定義されている場合に発生します。
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'
無効な注釈付きタイプ¶
このエラーは、注釈が型に注釈を付けることができない場合に発生します。
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
TypeAdapter
{#type-adapter-config-unused} では使用されません¶
型がオーバーライドできない独自の設定を持つ型である場合に、 TypeAdapter
にconfig
渡そうとすると、このエラーが発生します (現在、これはBaseModel
、 TypedDict
、および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'
代わりに、タイプをサブクラス化し、そのタイプをオーバーライドまたは設定する必要があります。
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
RootModel
{#root-model-extra} でmodel_config['extra']
指定することはできません¶
RootModel
初期化中に追加のフィールドを保存したり受け入れたりすることができないため、 RootModel
のサブクラスを作成するときに構成設定'extra'
の値を指定しようとすると、エラーが発生します。
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'
型アノテーション {#unevaluable-type-annotation} を評価できません¶
型注釈は代入_後に_評価されるため、いずれかのフィールドと競合する型注釈名を使用すると、予期しない結果が発生する可能性があります。次の場合にはエラーが発生します。
from datetime import date
from pydantic import BaseModel, Field
class Model(BaseModel):
date: date = Field(description='A date')
回避策として、エイリアスを使用するか、インポートを変更します。
import datetime
# Or `from datetime import date as _date`
from pydantic import BaseModel, Field
class Model(BaseModel):
date: datetime.date = Field(description='A date')
互換性のないdataclass
のinit
とextra
設定¶
Pydantic では、いずれかのフィールドにinit=False
設定されている場合、データクラスでextra='allow'
設定を指定することはできません。
したがって、次のようなことを行うことはできません。
from pydantic import ConfigDict, Field
from pydantic.dataclasses import dataclass
@dataclass(config=ConfigDict(extra='allow'))
class A:
a: int = Field(init=False, default=1)
上記のスニペットでは、 A
データクラスのスキーマ構築中に次のエラーが発生します。
pydantic.errors.PydanticUserError: Field a has `init=False` and dataclass has config setting `extra="allow"`.
This combination is not allowed.
dataclass
フィールド {#clashing-init-and-init-var} のinit
およびinit_var
設定に互換性がありません¶
init=False
とinit_var=True
設定は相互に排他的です。これを行うと、以下の例に示すPydanticUserError
が発生します。
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
はモデル フィールド {#model-config-invalid-field-name} として使用されます¶
このエラーは、 model_config
がフィールドの名前として使用されている場合に発生します。
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
はBaseModel
サブクラス {#with-config-on-model} で使用されます¶
このエラーは、既に Pydantic モデルであるクラスで with_config
デコレーターが使用されている場合に発生します (代わりに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
はBaseModel
サブクラス {#dataclass-on-model} で使用されます¶
このエラーは、Pydantic dataclass
デコレータがすでに 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'
本文总阅读量次