有沒有辦法在 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.
uj5u.com熱心網友回復:
Pydantic 做了一些隱式轉換,特別是在 int、str 或 float 等原始型別上。此處討論了此行為背后的原因。
確實,像這樣的課程:
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 的型別提示替代品。您會在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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/484253.html
