现在版本好像不需要自定义抛出异常了
来源: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
00 -
7七月
2024-12-30
自定义异常应该主要目的是返回一个JSON结构的结构体,不是只抛出一个异常 😂
00
相似问题