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
相关产品推荐
相关产品推荐

