Pydantic 在将数字分配给字符串时不验证
Pydantic does not validate when assigning a number to a string
将不正确的属性分配给 Pydantic 模型字段时,不会发生验证错误。
from pydantic import BaseModel
class pyUser(BaseModel):
username: str
class Config:
validate_all = True
validate_assignment = True
person = pyUser(username=1234)
person.username
>>>1234
try_again = pyUser()
pydantic.error_wrappers.ValidationError:
[ErrorWrapper(exc=MissingError(), loc=('username',))]
<class '__main__.pyUser'>
如何让 pydantic 验证作业?
根据 documentation 的预期行为:
str
strings are accepted as-is, int
, float
and Decimal
are coerced using str(v)
您可以使用 StrictStr
、StrictInt
、StrictFloat
和 StrictBool
类型来防止来自兼容类型的强制转换。
from pydantic import BaseModel, StrictStr
class pyUser(BaseModel):
username: StrictStr
class Config:
validate_all = True
validate_assignment = True
person = pyUser(username=1234) # ValidationError `str type expected`
print(person.username)
将不正确的属性分配给 Pydantic 模型字段时,不会发生验证错误。
from pydantic import BaseModel
class pyUser(BaseModel):
username: str
class Config:
validate_all = True
validate_assignment = True
person = pyUser(username=1234)
person.username
>>>1234
try_again = pyUser()
pydantic.error_wrappers.ValidationError:
[ErrorWrapper(exc=MissingError(), loc=('username',))]
<class '__main__.pyUser'>
如何让 pydantic 验证作业?
根据 documentation 的预期行为:
str
strings are accepted as-is,
int
,float
andDecimal
are coerced usingstr(v)
您可以使用 StrictStr
、StrictInt
、StrictFloat
和 StrictBool
类型来防止来自兼容类型的强制转换。
from pydantic import BaseModel, StrictStr
class pyUser(BaseModel):
username: StrictStr
class Config:
validate_all = True
validate_assignment = True
person = pyUser(username=1234) # ValidationError `str type expected`
print(person.username)