【问题标题】:WTFforms: how to avoid the OverflowError in NumberRange validator for large integers?WTForms:如何避免大整数的数字范围验证器中的溢出错误?
【发布时间】:2020-10-07 13:00:25
【问题描述】:

我正在编写一个 Flask 网络应用程序,并且我正在使用 WTForms 的表单。 其中一个输入是 IntegerField

field = IntegerField('Field', validators=[InputRequired(), NumberRange(min=0, max=100)])

由于我使用的是验证器 NumberRange(min=0, max=100),因此我正确地拒绝了像 10090 这样的输入,但是在插入太大的输入时,例如:

99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

我收到以下错误:

OverflowError: int too large to convert to float

我该如何解决这个问题?

【问题讨论】:

    标签: python validation flask flask-wtforms integer-overflow


    【解决方案1】:

    这是wtforms 无法处理的事情,因此您必须:

    try:
        field = IntegerField('Field', validators=[InputRequired(), NumberRange(min=0, max=100)])
    except OverflowError as e:
        raise Exception(e.args[0]) # Or better yet - use the actuall exception thrown when the input is 101
    

    【讨论】:

    • 您好,感谢您的回答!我将如何以这种输入无效的方式编写错误处理程序?我想要插入 10090 作为输入的完全相同的行为
    • 插入错误输入时,我实际上不记得 throwwtforms 的异常,但您基本上只是导入该异常,并在捕获异常后引发它(我编辑了我的答案)跨度>
    • 感谢您的澄清:我尝试将您的代码插入表单类中的字段声明中,但仍然出现相同的错误:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2013-05-16
    • 2017-05-22
    • 2018-06-18
    • 1970-01-01
    相关资源
    最近更新 更多