WTForms自定义验证器崩溃而不是返回错误消息

时间:2017-04-04 14:26:36

标签: python flask wtforms flask-wtforms

我试图使用WTForms制作一个非常简单的验证器 - 确保输入是a)存在和b)一些类型(float或int都可以)。我编写了以下类并将其添加到WTForms中的validators.py库中:

class MyValidator(object):
    def __init__(self, message=None):
        self.message = message

    def __call__(self, form, field):
        if not field.data:
            if self.message is None:
                message = field.gettext('This field is required.')
                return ValidationError(self.message)

        try:
            val = float(field.data)
        except NameError:
            self.message = ('Input must be a number')
            raise ValidationError(self.message)
        return field.data

并将其添加到我的表单中:

class foo(Form):
    bar = IntegerField('foo',[validators.MyValidator()])

当我进入验证阶段(if not foo.validate,其中foo是foo类的一个实例)时,这会导致我的Flask应用程序崩溃,并带有此回溯:

  File "C:\Users\~~\AppData\Local\Programs\Python\Python35\lib\site-packages\wtforms\validators.py", line 158, in __call__
    val = float(field.data)
TypeError: float() argument must be a string or a number, not 'NoneType'

这很烦人。我如何才能返回False?我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:0)

好的,发现我的错误。这简直令人尴尬,我的本能是删除这个问题,但未来可能代码对其他人有用。

例外行当然应该是:

except (TypeError, NameError):