Python报错IndexError: Replacement index 2 out of range如何解决?
错误原因及解决办法
直接触发错误的原因
你的格式字符串metin = "{:<20} {:<20} {:<4}"定义了3个占位符,但调用format时只传入了yazarlar[i], kitaplar[i]两个参数,第三个占位符找不到对应值,因此抛出IndexError: 位置参数元组的替换索引2超出范围。
修复步骤
修正格式参数传递:把
sayfalar[i]放入format的参数列表,而不是作为print的独立参数:print(metin.format(yazarlar[i], kitaplar[i], sayfalar[i]))排查潜在问题:
- 检查CSV文件每行是否都包含3个逗号分隔的字段,若某一行拆分后不足3个元素,
line[2]处也会触发索引错误。可以添加字段长度判断:for i in veriler: line = i.split(',') if len(line) >= 3: yazarlar.append(line[0]) kitaplar.append(line[1]) sayfalar.append(line[2]) else: print(f"无效行:{i}") - 用
i[:-1]去除换行符存在风险(比如最后一行无换行符时会误删末尾字符),改用i.strip()更稳妥:veriler.append(i.strip())
- 检查CSV文件每行是否都包含3个逗号分隔的字段,若某一行拆分后不足3个元素,
完整修正代码
veriler = list() yazarlar = list() kitaplar = list() sayfalar = list() with open('veriler.csv') as file: for i in file.readlines(): veriler.append(i.strip()) for i in veriler: line = i.split(',') if len(line) >=3: yazarlar.append(line[0]) kitaplar.append(line[1]) sayfalar.append(line[2]) else: print(f"跳过无效行:{i}") metin = "{:<20} {:<20} {:<4}" for i in range(len(yazarlar)): print(metin.format(yazarlar[i], kitaplar[i], sayfalar[i]))
内容的提问来源于stack exchange,提问作者abdussamed ucar
相关产品推荐
相关产品推荐

