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)
コメント