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

Flask中列表追加触发IndexError:索引越界问题求助

解决Flask中IndexError: list index out of range的问题

嘿,我一眼就看出你这个索引越界错误的核心原因了——你预先把mainpage_list固定成了只有两个空列表的结构,但循环却试图访问超出这个范围的索引。

具体问题分析

  1. 你一开始定义了mainpage_list = [[],[]],这意味着它只有索引0和1两个子列表,最多只能存两组股票数据。
  2. 你的循环范围是range(0, (lengh_dict - 1)):
    • 当数据库查询结果≤3行时,lengh_dict-1最大是2,循环会执行i=0和i=1,刚好对应mainpage_list的两个子列表,所以不会报错,但这里还藏着另一个问题:range(0, lengh_dict-1)会漏掉最后一行数据!比如3行数据的话,索引2的那行根本没被处理。
    • 当查询结果超过3行时,比如有4条数据,lengh_dict-1=3,循环会执行i=0、1、2,但mainpage_list[2]根本不存在,直接触发IndexError。

两种修复方案

方案一:动态添加子列表(更推荐,Pythonic写法)

直接遍历查询结果的每一行,为每行数据创建新的子列表,再追加到mainpage_list里,不管有多少条数据都不会越界:

current_stock_dict = db.execute("SELECT * FROM current_stocks WHERE c_user_id=:user_id ", user_id=session["user_id"])
# 改成空列表,后续动态添加子列表
mainpage_list = []
price_sum = 0
share_sum = 0

# 直接遍历查询结果的每一行,不用索引循环
for stock in current_stock_dict:
    stock_info = []  # 为当前股票创建一个新的子列表
    c_symbol = stock["c_symbol"]
    lookup_symbol = lookup(c_symbol)
    
    stock_info.append(c_symbol)
    stock_info.append(lookup_symbol["name"])
    c_count = stock["c_count"]
    stock_info.append(c_count)
    share_price = lookup_symbol["price"]
    stock_info.append("$" + str(share_price))
    
    total_price = float(share_price) * int(c_count)
    stock_info.append("$" + str(total_price))
    
    price_sum += total_price
    share_sum += c_count
    mainpage_list.append(stock_info)  # 将当前股票信息加入主列表

方案二:预先初始化对应长度的列表

如果坚持要用索引循环,那先根据查询结果的长度初始化mainpage_list,同时修正循环范围避免漏掉数据:

current_stock_dict = db.execute("SELECT * FROM current_stocks WHERE c_user_id=:user_id ", user_id=session["user_id"])
lengh_dict = len(current_stock_dict)
# 根据查询结果的长度,初始化对应数量的空列表
mainpage_list = [[] for _ in range(lengh_dict)]
price_sum = 0
share_sum = 0

# 循环范围改成range(lengh_dict),遍历所有行
for i in range(lengh_dict):
    stock = current_stock_dict[i]
    c_symbol = stock["c_symbol"]
    lookup_symbol = lookup(c_symbol)
    
    mainpage_list[i].append(c_symbol)
    mainpage_list[i].append(lookup_symbol["name"])
    c_count = stock["c_count"]
    mainpage_list[i].append(c_count)
    share_price = lookup_symbol["price"]
    mainpage_list[i].append("$" + str(share_price))
    
    total_price = float(share_price) * int(c_count)
    mainpage_list[i].append("$" + str(total_price))
    
    price_sum += total_price
    share_sum += c_count

额外提醒

原来的循环范围range(0, lengh_dict-1)是错误的,会漏掉最后一条数据,上面两种方案都修复了这个问题,确保所有股票数据都会被处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:47:32