【pydantic】未定義フィールドの動作

pydanticで未定義のフィールドを指定した場合の動作をまとめました。

概要

Extra.allow: 未定義のフィールドを指定するとそのフィールドが追加される
Extra.ignore: 未定義のフィールドを指定してもそのフィールドは無視される
Extra.forbid: 未定義のフィールドを指定するとValidationErrorが発生

BaseModelのデフォルトはExtra.ignore, BaseSettingsのデフォルトはExtra.forbidです。

Extra.ignore

class ModelA(BaseModel):
    x: float = Field(default=0.0)
    y: float = Field(default=0.0)
    z: float = Field(default=0.0)

print(ModelA(x=1, y=2, z=3, aaa=4))
# x=1.0 y=2.0 z=3.0

Extra.allow

class ModelA(BaseModel, extra=Extra.allow):
    x: float = Field(default=0.0)
    y: float = Field(default=0.0)
    z: float = Field(default=0.0)

print(ModelA(x=1, y=2, z=3, aaa=4))
# x=1.0 y=2.0 z=3.0 aaa=4

Extra.forbid

class ModelA(BaseModel, extra=Extra.forbid):
    x: float = Field(default=0.0)
    y: float = Field(default=0.0)
    z: float = Field(default=0.0)

print(ModelA(x=1, y=2, z=3, aaa=4))
Traceback (most recent call last):
  File "./model.py", line 9, in <module>
    print(ModelA(x=1, y=2, z=3, aaa=4))
  File "/Users/kuro/Library/Python/3.8/lib/python/site-packages/pydantic/main.py", line 341, in __init__
    raise validation_error
pydantic.error_wrappers.ValidationError: 1 validation error for ModelA
aaa
  extra fields not permitted (type=value_error.extra)

コメント

タイトルとURLをコピーしました