2017-04-04 33 views
0

我試圖讓什麼應該是一個非常簡單的驗證器使用WTForms - 確保輸入是a)呈現和b)一些類型的數字(float或int都是好的)。我寫了下面的類和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()]) 

這使我的瓶的應用程序時,我得到驗證崩潰階段(if not foo.validate,其中foo是Foo類的實例),與此回溯:

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

好的,發現我的錯誤。這簡直令人尷尬,我的直覺是刪除這個問題,但也許代碼將在未來對其他人有所幫助。

例外行當然應該閱讀:

except (TypeError, NameError): 
相關問題