You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask+MongoDB应用出现UnboundLocalError:无法访问request变量

问题原因

你遇到的UnboundLocalError是因为局部变量名冲突:在视图函数中,你用for request in requests定义了一个名为request的循环变量,这个局部变量会覆盖从Flask导入的全局request对象。Python解释器解析函数时,会把request标记为局部变量,所以当你在函数开头调用request.args.get()时,它会认为你要访问的是还未赋值的局部request变量,从而抛出错误。

解决方法

只需修改循环变量的名称,避免和Flask的request对象重名即可,比如改成req:

修改后的代码片段:

@app.route('/user-contribution-requests', methods=['GET'])
@jwt_required()
def get_user_contribution_requests():
    contribution_requests = db.contribution_requests
    user_id = get_jwt_identity()
    page_str = request.args.get('page', 1)
    page = int(page_str)
    rows_per_page = int(request.args.get('rowsPerPage', 5))
    
    total_count = contribution_requests.count_documents({'user_id': user_id})
    requests = list(contribution_requests.find({'user_id': user_id})
                    .skip((page - 1) * rows_per_page)
                    .limit(rows_per_page))
    
    # 修改循环变量名称,避免和Flask的request冲突
    for req in requests:
        req['_id'] = str(req['_id'])
        
        if 'project_id' in req:
            req['project_id'] = str(req['project_id'])
        
        # 转换日期字符串为datetime对象
        for date_field in ['request_creation_date', 'created_at', 'updated_at']:
            if date_field in req and isinstance(req[date_field], str):
                try:
                    req[date_field] = datetime.fromisoformat(req[date_field])
                except ValueError:
                    req[date_field] = None
        
        # 将日期格式化为ISO字符串
        req['request_creation_date'] = req['request_creation_date'].isoformat() if req['request_creation_date'] else None
        req['created_at'] = req['created_at'].isoformat() if req['created_at'] else None
        req['updated_at'] = req['updated_at'].isoformat() if req['updated_at'] else None

    return jsonify({'contribution_requests': requests, 'totalCount': total_count}), 200
额外说明

Python的变量作用域规则是:如果函数内部有对变量的赋值(循环变量的定义相当于赋值),该变量会被视为函数的局部变量,无论它是否和全局变量重名。因此要避免在函数内使用和全局导入对象同名的局部变量,这类错误常见但容易被忽略。

内容的提问来源于stack exchange,提问作者Divakar Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:30:09