2017-04-04 5 views
0

WTFormsを使って本当に単純なバリデーターを作成しようとしています - 入力がa)presentとb)いくつかの型(floatまたはintが両方ともOKです。 )。私は、次のクラスを書き、WTFormsでvalidators.pyライブラリにこれを追加しました:WTFormsカスタムバリデーターがエラーメッセージを返す代わりにクラッシュする

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()]) 

私が検証されたらこれは私のフラスコアプリがクラッシュしますこのトレースバックで、(fooはfooのクラスのインスタンスをあるif not foo.validate、)舞台:

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を返しますか?私は明白な何かを欠いていますか

答えて

0

OK、私の間違いが見つかりました。恥ずかしくて簡単でしたし、私の本能は質問を削除することでしたが、将来このコードが他の誰かに役立つかもしれません。

例外ラインはもちろん、読んでください:

except (TypeError, NameError): 
関連する問題