在 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
, StrictFloat
和 StrictInt
作为 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)
有没有办法在 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
, StrictFloat
和 StrictInt
作为 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)