【问题标题】:exception for non existing parameter in FLASKFLASK 中不存在的参数的异常
【发布时间】:2025-11-21 09:30:01
【问题描述】:

我有一个发送参数的表单。 在我的表格中,我有一个复选框。 如果我的复选框没有被选中,那么我将不会得到任何参数。

如果在我的模块中有:

var = request.form['mycheckbox']

如果我的复选框没有被选中(参数没有通过)

然后在调试模式下我收到错误消息:

Bad Request 浏览器(或代理)发送了该服务器的请求 听不懂。

没有告诉我错误是什么。

我通过使用防止了异常:

    try:
        var=request.form['checkbox']
    except:
        var=None

但是我不能改变 Flask 处理这种情况的行为吗?

【问题讨论】:

    标签: python flask werkzeug


    【解决方案1】:
    var = request.form.get('checkbox')
    

    如果参数未定义,这将返回None

    【讨论】:

      【解决方案2】:

      原因隐藏在此处的烧瓶文档中:http://flask.pocoo.org/docs/api/#flask.Flask.trap_http_exception

      我不确定为什么调试模式没有改变这种行为,但是为了让 Flask 捕获来自 werkzeug 的 BadRequestKeyError 异常,你需要在你的应用程序对象上运行类似这样的东西:

      app.config['TRAP_BAD_REQUEST_ERRORS'] = True
      

      【讨论】:

      • 我提交了github.com/mitsuhiko/flask/issues/382,看看是否可以在启用调试时将其设为默认值。
      • 我必须说,这真是令人失望的行为,让我感到困惑,为什么烧瓶不想和我说话,当我表现出如此多的爱时。感谢您的开票和您的回答
      【解决方案3】:

      我在验证单个布尔字段时遇到了类似的问题。

      我通过使用remember = form.rememberme.data 而不是request.form['remember_me'] 解决了这个问题

      【讨论】: