python 中的 IndexError: list index out of range

这是代码:

records = {}
file = open(filepath, 'r')
for line in file.readlines():
r = line.split('\t')
print r
records.setdefault(int(r[1]), {})

records[int(r[1])].setdefault(int(r[0]), {})

records[int(r[1])][int(r[0])] = float(r[2])

其中r打印出来是:
['15', '3116', '3.0', '1337402827\n']
['\n']

提示的错误是: records.setdefault(int(r[1]), {})
IndexError: list index out of range

我换成 print r[1] 的时候,打印出来的是【3116】
但是提示的错误是:

print r[1]
IndexError: list index out of range

这是什么问题啊。。

”IndexError: list index out of range”这种错误一般有两种情况:

第一种可能情况:list[index], index超出范围,也就是常说的数组越界。

第二种可能情况:list是一个空的,没有一个元素,进行list[0]就会出现该错误,在爬虫问题中很常见,比如有个列表爬去下来为空,统一处理就会报错。

扩展资料:

异常处理特点:

1.在应用程序遇到异常情况(如被零除情况或内存不足警告)时,就会产生异常。

2.发生异常时,控制流立即跳转到关联的异常处理程序(如果存在)。

3.如果给定异常没有异常处理程序,则程序将停止执行,并显示一条错误信息。

4.可能导致异常的操作通过 try 关键字来执行。

5.异常处理程序是在异常发生时执行的代码块。在 C# 中,catch 关键字用于定义异常处理程序。

6.程序可以使用 throw 关键字显式地引发异常。

7.异常对象包含有关错误的详细信息,其中包括调用堆栈的状态以及有关错误的文本说明。

8.即使引发了异常,finally 块中的代码也会执行,从而使程序可以释放资源。

参考资料:百度百科——异常处理

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-09-28
.strip()函数
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
增加一行 a = a.strip() #a为报错的变量,这样就能清楚掉空格了,运行速度也快了。
第2个回答  2013-06-10
一般外部输入的数据都可能存在问题。所以通常在readlines后要做一次处理

for line in file.readlines():
if not line.strip():continue
r = line.split('\t')
if len(r)<3:continue
print r
try:
records.setdefault(int(r[1]), {})
records[int(r[1])].setdefault(int(r[0]), {})
records[int(r[1])][int(r[0])] = float(r[2])
except ValueErro:
continue

这样就避免了空行,字段数不足,以及类型转换出错。本回答被提问者采纳
第3个回答  2013-06-09
因为就只有r[0]这个元素,用r[1]当然下表越界了。先用len(r)判断一下长度。
另外 int(r[0]) 或者int(r[1])也可能出异常的,需要保护
第4个回答  2013-06-09
IndexError:索引越界
相似回答