Python line.split方法运行报IndexError列表索引越界问题求助
错误原因
触发num2相关IndexError的核心问题有两处:
- 多余的内层遍历逻辑:执行
resplit = itemInfo[1].strip()后,得到的是类似(15.75,10.0,44.0)的完整字符串,你写for line in resplit时,实际是在逐字符遍历这个字符串,每次循环拿到的line是单个字符(比如(、1、.这类),并非带逗号的完整数值段。 - 单个字符调用
split(",")只会返回长度为1的列表,此时访问索引为1的split[1]必然触发索引越界错误。
另外原逻辑也没有处理数值段外层的括号,就算删掉内层循环直接分割,拿到的数值也会残留括号字符,不符合拆分要求。
修正后代码
你要拆分的4个部分分别是菜品名、三个数值,不需要内层循环,先去除数值段外层括号再按逗号分割即可,对应实现如下:
item = [ "Ham and Egg Sandwich $(15.75,10.0,44.0)", "Bacon and Cheese Plate $(9.5,3.0,50.0)", 'Tuna Salad $(12.3,4.0,20.0)', 'Beef Soup $(9.0,2.0,30.0)', 'Spicy Beef Barbeque $(20.0,18.0,20.0)', 'Pork Barbeque $(18.0,12.0,35.0)', 'Oven Chicken Barbeque $(15.0,9.0,50.0)', 'Pulled Beef Barbeque Burger $(25.0,20.0,35.0)', 'House Salad $(5.0,2.5,46.0)', 'Pellegrino $(5.4,3.0,60.0)', 'White Wine $(7.5,5.0,40.0)', 'Red Wine $(11.0,4.0,71.0)' ] # 初始化4个独立列表存储拆分结果 item_names = [] price_list = [] param1_list = [] param2_list = [] for line in item: # 按$分割菜品名和数值段 name_part, num_str_part = line.split("$") item_name = name_part.strip() # 去除数值段外层括号,按逗号拆分三个数值 num1, num2, num3 = [seg.strip() for seg in num_str_part.strip().strip("()").split(",")] # 分别存入对应列表 item_names.append(item_name) price_list.append(num1) param1_list.append(num2) param2_list.append(num3)
关键修改点
- 删除了错误的内层字符遍历逻辑,直接对完整数值段做分割处理
- 新增了括号去除逻辑,避免数值残留无效字符
- 提前初始化4个独立列表,拆分后直接追加存储,匹配最初的拆分需求
内容的提问来源于stack exchange,提问作者Balexander013
相关产品推荐
相关产品推荐

