现在版本好像不需要自定义抛出异常了

来源:4-7 自定义异常对象

亦余心之所善兮灬

2024-10-17

现在版本好像不需要自定义抛出异常了,错误的type code代码会直接运行报错,并返回
ValueError: 99 is not a valid ClientEnums

raise ValueError("%r is not a valid %s" % (value, cls.__name__))
ValueError: 99 is not a valid ClientEnums
127.0.0.1 - - [17/Oct/2024 12:06:08] "POST /v1/client/register HTTP/1.1" 500 -
ValueError: 99 is not a valid ClientEnums
写回答

2回答

along_diCIT5

2025-03-30

根据WTForms的文档,自定义验证器应该通过引发ValidationError来指示验证失败,这样WTForms会捕获这个异常,并将错误信息添加到对应的字段错误列表中。而如果抛出的是其他类型的异常,比如ValueError,WTForms可能不会处理,导致异常传播到上层,从而触发Flask的500错误处理。解决方法如下:

1、需将其转换为 WTForms 的 ValidationError

2、怎么取到ValueError的错误信息:通过 str(e) 或 e.args 提取信息

3、错误信息会自动存入 form.errors

class ClientForm(Form):
    """
    客户端验证层的基类,用于验证客户端注册信息。
    """
    account = StringField(validators=[DataRequired(message='不允许为空'), Length(
        min=5, max=32
    )])
    secret = StringField()
    type = IntegerField(validators=[DataRequired()])

    # 验证客户端类型是否有效
    def validate_type(self, value):
        try:
            client = ClientTypeEnum(value.data)
        except ValueError as e:
            raise ValidationError(str(e))        # 错误信息存入 form.errors
            # raise ValidationError(e.args[0])   # 也可以
            # raise e                            # 会直接抛出异常

        self.type.data = client


0
0

7七月

2024-12-30

自定义异常应该主要目的是返回一个JSON结构的结构体,不是只抛出一个异常 😂

0
0

Python Flask高级编程之RESTFul API前后端分离精讲

RESTFul+权限管理+token令牌+扩展flask=提升编程思维

2037 学习 · 359 问题

查看课程