”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 块中的代码也会执行,从而使程序可以释放资源。
参考资料:百度百科——异常处理
.strip()函数
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
增加一行 a = a.strip() #a为报错的变量,这样就能清楚掉空格了,运行速度也快了。
一般外部输入的数据都可能存在问题。所以通常在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
这样就避免了空行,字段数不足,以及类型转换出错。
因为就只有r[0]这个元素,用r[1]当然下表越界了。先用len(r)判断一下长度。
另外 int(r[0]) 或者int(r[1])也可能出异常的,需要保护
IndexError:索引越界