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

marshmallow中的ValidationError()异常详解

发布时间:2023-12-25 08:24:53

ValidationError()是marshmallow模块中的一个异常类,用于表示验证数据时发生的错误。当使用marshmallow进行数据验证时,如果数据不满足指定的验证规则,就会引发ValidationError()异常。

下面详细介绍一下ValidationError()异常,并以一个使用例子来说明它的使用方法。

异常类的定义:

class ValidationError(Exception):

    """Exception raised when data fails schema validation"""

    def __init__(self, message=None, field_name=None, fields=None, **kwargs):

        self.field_name = field_name

        self.fields = fields

        self.kwargs = flatten_schema_errors(kwargs)

        super().__init__(message)

ValidationError()继承自Exception类,是一个自定义异常类。它接受以下几个参数:

- message: 异常的错误信息。可以自定义错误信息,也可以使用默认的错误信息。

- field_name: 出错的字段名。如果验证的是一个字段,可以将字段名传入该参数。

- fields: 出错的字段集合。如果验证的是多个字段,可以将字段集合传入该参数。

- kwargs: 额外的关键字参数。可以传入一些额外的信息,如错误码、详细错误描述等。

异常类的使用方法:

1. 自定义错误信息:

try:

    data, errors = schema.load({"name": "John", "age": -20})

except ValidationError as e:

    print(e.args[0])

当数据不满足验证规则时,会引发ValidationError()异常。可以在except语句中捕获该异常,并使用args[0]获取异常的错误信息。

上述例子中,数据中的age字段的值为-20,不符合年龄的范围(应为正整数),所以会引发ValidationError()异常。该异常的默认错误信息为"Invalid value",可以通过自定义错误消息来替换默认错误信息。

2. 获取出错的字段名或字段集合:

try:

    data, errors = schema.load({"name": "John", "age": -20})

except ValidationError as e:

    print(e.field_name)

    print(e.fields)

当有多个字段需要验证时,可以传入字段名或字段集合,来标识出错的字段。上述例子中,age字段验证失败,可以通过e.field_name获取出错的字段名('age'),或通过e.fields获取所有出错的字段集合({'age'})。

3. 获取额外的错误信息:

try:

    data, errors = schema.load({"name": "John", "age": -20})

except ValidationError as e:

    print(e.kwargs)

可以通过e.kwargs获取传入的额外关键字参数。上述例子中,未传入额外的关键字参数,所以e.kwargs为{}。

总结:

ValidationError()是marshmallow模块中的一个异常类,用于表示数据验证时发生的错误。它提供了自定义错误信息、获取出错的字段名或字段集合、获取额外错误信息等功能。可以帮助我们更好地处理数据验证时发生的异常情况。