欢迎访问宙启技术站
智能推送

使用marshmallow时发生的ValidationError()异常

发布时间:2023-12-25 08:21:25

Marshmallow是一个Python库,用于将复杂的数据结构序列化为Python对象,或将Python对象转化为可序列化的数据结构。

Marshmallow提供了ValidationError类来处理解析或验证数据时的错误。当遇到错误时,可以通过引发ValidationError来抛出异常,并提供相应的错误消息。

下面是一个使用Marshmallow和ValidationError的例子:

from marshmallow import Schema, fields, validate, ValidationError

class UserSchema(Schema):
    username = fields.Str(validate=validate.Length(min=3, max=20))
    email = fields.Email()
    age = fields.Int(validate=validate.Range(min=18, max=99))

# 创建一个UserSchema实例
user_schema = UserSchema()

# 验证一个有效的用户对象
valid_data = {"username": "john_doe", "email": "john.doe@example.com", "age": 30}
try:
    user_schema.load(valid_data)
    print("Data is valid")
except ValidationError as err:
    print("Data is not valid:", err.messages)

# 验证一个无效的用户对象
invalid_data = {"username": "jd", "email": "john.doe@example", "age": 15}
try:
    user_schema.load(invalid_data)
    print("Data is valid")
except ValidationError as err:
    print("Data is not valid:", err.messages)

在上面的例子中,我们定义了一个UserSchema类来描述用户对象的结构。用户名必须在3到20个字符之间,电子邮件必须符合电子邮件的格式,年龄必须在18到99之间。

我们首先尝试验证一个有效的用户对象,如果数据是有效的,则会打印"Data is valid"。然后我们尝试验证一个无效的用户对象,这个对象的用户名太短,电子邮件的格式不正确,年龄太小。如果数据无效,则会打印"Data is not valid",并打印相应的错误消息。

在这个例子中,使用了Length和Range验证器来对用户名和年龄进行验证。当验证失败时,将引发ValidationError,并打印出错误消息。例如,对于无效的用户名,ErrorMessage的消息可能是{"username": ["Shorter than minimum length 3."]}。

通过使用Marshmallow和ValidationError,我们可以轻松地验证和解析复杂的数据结构,并处理错误情况。这是一个非常有用的工具,在处理和验证用户输入等情况下尤为重要。