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)

您可以使用 StrictStrStrictIntStrictFloatStrictBool 类型来防止来自兼容类型的强制转换。

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)