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

Flask访问filtered_url[0]触发list index out of range错误排查

报错根因

索引越界出在filtered_url1 = filtered_url[0].split(',')这行,本质是你没区分GET/POST请求的处理逻辑:

  • 浏览器首次打开站点根路径时,发送的是GET请求,此时还没提交表单,request.form中不存在website字段,request.form.get("website")返回None
  • 你把这个None追加到全局url列表后,过滤非None元素得到的filtered_url是空列表,直接取索引0必然触发越界错误
  • 额外逻辑隐患:全局定义的url列表会被所有访问用户的请求共享,会出现不同用户提交的数据互相污染的问题,生产环境不能这么写。
修复方案

核心调整点:

  • 区分请求方法,仅在POST表单提交时读取和处理URL参数
  • 移除全局url变量,避免跨请求数据污染
  • 读取参数后做空值校验,避免边界场景报错

修复后可直接运行的代码参考:

from flask import Flask, render_template, request
from flask_restful import Api, Resource

app = Flask(__name__, template_folder="template")

@app.route("/", methods=["POST", "GET"])
def hello():
    processed_urls = []
    # 仅处理POST提交的表单数据
    if request.method == "POST":
        website_str = request.form.get("website")
        if website_str:
            # 拆分逗号分隔的URL,自动去掉每个URL前后的空格、过滤空值
            processed_urls = [item.strip() for item in website_str.split(',') if item.strip()]
            print(processed_urls)
    # 处理完的数据可以传给模板渲染
    return render_template("login.html", url_list=processed_urls)

if __name__ == "__main__":
    app.run(debug=True)
补充提示

如果需要持久化存储用户提交的URL,不要用全局变量,开发测试阶段可以用flask.session绑定单个用户的数据,正式上线建议对接数据库做存储,避免服务重启数据丢失、多请求数据错乱的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:48:28