コンテンツにスキップ

使用エラー

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()

Configmodel_config両方とも {#config-both} を定義しました

このエラーは、 class Configmodel_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'

ルートバリデータ、 preskip_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'

validatorfieldconfig 、および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} では使用されません

型がオーバーライドできない独自の設定を持つ型である場合に、 TypeAdapterconfig渡そうとすると、このエラーが発生します (現在、これはBaseModelTypedDict 、および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')

互換性のないdataclassinitextra設定

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=Falseinit_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_configBaseModelサブクラス {#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'

dataclassBaseModelサブクラス {#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'

本文总阅读量