Python读取文件列表越界问题:循环条件错误如何解决?
问题分析与解决
你的循环条件确实错误了,原因在于:
- 当
readline()读到文件末尾或者空行时,会返回空字符串,对这个空字符串调用split()方法,得到的是空列表[],而不是空字符串''。 - 你的循环条件
line != ''会把空列表判定为不等于空字符串,所以循环会继续执行,此时访问line[0]和line[1]自然会触发索引越界错误。
解决方法
方法一:修正循环条件
直接判断列表是否为空(空列表在布尔语境下为False),把循环条件改成:
while line:
修改后的完整代码:
def read_input(input_file): capacities=[] amounts=[] line = input_file.readline().split() while line: print(line) capacities.append(line[0]) amounts.append(line[1]) line = input_file.readline().split()
方法二:更健壮的遍历方式(推荐)
用for循环直接遍历文件对象,自动处理每行读取,同时跳过空行,还能避免手动调用readline的繁琐:
def read_input(input_file): capacities = [] amounts = [] for line in input_file: stripped_line = line.strip() # 跳过空行 if not stripped_line: continue parts = stripped_line.split() # 适配你的文本格式:提取数字部分并清理逗号 capacities.append(parts[1]) amounts.append(parts[2].rstrip(',')) return capacities, amounts
补充说明:从你的文本内容来看,每行拆分后有3个元素,如果你原本想提取的是数字部分(10、11、12作为capacities,3、4、5作为amounts),记得调整索引并清理掉末尾的逗号,否则会把3,这种带符号的字符串存入列表。
内容的提问来源于stack exchange,提问作者Karol Wyrębkiewicz
相关产品推荐
相关产品推荐

