在 pydantic 中检查输入数据类型

Checking input data types in pydantic

有没有办法在 pydantic 中原生检查输入变量的数据类型,例如:

class ModelParameters(BaseModel):
    str_val: str
    int_val: int
    wrong_val: int


test = ModelParameters(**dict({
    "str_val":"test",
    "int_val":1,
    "wrong_val":1.2}))

哪个应该为 wrong_val.

抛出错误

Pydantic 会进行一些隐式转换,尤其是对 int、str 或 float 等原始类型。 here.

讨论了此行为背后的原因

确实如此,class 是这样的:

class ModelParameters(BaseModel):
    str_val: str
    int_val: int
    wrong_val: int

你绝对可以像这样实例化一个对象:

test = ModelParameters(**dict({
    "str_val": 123,
    "int_val": "1",
    "wrong_val": 1.2}))

test
# ModelParameters(str_val='123', int_val=1, wrong_val=1)

但是您可以选择强制类型检查。您需要做的是使用StrictStr , StrictFloatStrictInt 作为 str、float 和 int 的 type-hint 替代品。您会在 pydantic.types 中找到它们。在你的情况下:

from pydantic.types import StrictStr, StrictInt

class ModelParameters(BaseModel):
    str_val: StrictStr
    int_val: StrictInt
    wrong_val: StrictInt

现在,如果您尝试相同的实例化,您会看到到处都是验证错误,正如您所期望的那样:

test = ModelParameters(**dict({
    "str_val": 123,
    "int_val": "1",
    "wrong_val": 1.2}))
pydantic.error_wrappers.ValidationError: 3 validation errors for ModelParameters
str_val
  str type expected (type=type_error.str)
int_val
  value is not a valid integer (type=type_error.integer)
wrong_val
  value is not a valid integer (type=type_error.integer)