Python比对csv文件元素时出现IndexError: list index out of range报错求助
报错原因与修复方案
核心报错原因
你遇到的IndexError: list index out of range和数据类型无关,触发原因是csv文件中存在空白行:csv.reader读取到完全空白的行时,会返回空列表[],此时你直接访问row[0]就会触发索引越界错误。
你猜测的类型不匹配问题不存在:input()返回的结果本身就是字符串类型,csv.reader读取的每行字段默认也是字符串类型,你可以通过以下代码验证二者类型:
print(type(username)) print(type(row[0]))
另外你的代码还存在三个隐藏问题:
with open上下文管理器会自动关闭文件,不需要额外写f.close()line_count变量没有预先初始化就执行+=1操作,后续运行也会触发报错- 你给出的代码片段中
with open行的缩进错误,要和前面的username = ...行保持同级缩进
修复后代码示例
import csv line_count = 0 # 提前初始化计数变量 username = input("Please put in username: ") with open(r"C:\Users\This\Is\A\Path\user.csv", 'r', encoding='utf-8') as f: reader = csv.reader(f, delimiter=',') for row in reader: # 先判断行不为空再访问索引 if not row: continue if username == row[0]: data = row print(data) line_count += 1
可选优化方案
你可以使用csv.DictReader直接按列名读取字段,不需要硬编码索引,可读性和容错性更高:
import csv line_count = 0 username = input("Please put in username: ") with open(r"C:\Users\This\Is\A\Path\user.csv", 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: if username == row['Username']: print(list(row.values())) line_count += 1
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

