跳到主要内容

IndexError list index out of range 错误原理及解决方法(python)

· 3 分钟阅读
Allen Ma

发现问题

当我在写文章金融数据分析(一)python预热中的项目二:计算手机销量年增长率的时候,出现过如下报错:在这里插入图片描述 看着结果是已经跑出来了,但是前面那一长串着实然人看着不舒心。再加上==Process finished with exit code 1==让我更加确信这里面有喵腻。

如图所示,错误提示为

Traceback (most recent call last):
IndexError: list index out of range

查找原因

经过查找相关资料我知道了list index out of range错误出现的原因主要有两个。

一个可能是下标超出范围, 一个可能是list是空的,没有一个元素

接下来我来用一个例子来说明一下这个抽象的说法: 打开idle输入以下代码

>>> li = [1,2,3,4,5,6,7,8,9,10]
>>> #索引[0,1,2,3,4,5,6,7,8,9 ]
>>> li[8]
9
>>> li[10]
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
li[10]
IndexError: list index out of range
>>> # 像这样,索引值超出了循环,也叫越界

尝试解决

尝试第一次解决: 加上try...except模块

for s in linestr:
try:
L = s.split('\t')
print(L[0], end=" ")
print(isBigGrowth(L, 0.3))
except:
print('运行失败')

运行结果: 在这里插入图片描述可以看到,让人头疼的红色错误提示已经没有了,而且==Process finished with exit code 0== 问题看起来已经解决了,但是我们自己知道,这只是表面现象,刚才的问题其实并没有解决,而是我们选择不显示了。 治标不治本!

尝试第二次解决: 我注意到,程序是在最后一条抛异常了。手机公司是能够全部分析判断完的,那会不会是第二个错误原因呢?有为空的list。 所以我对源文档进行了检查,发现在末尾果然存在一行空行。 在这里插入图片描述 在删除末尾的空行之后再运行程序: 在这里插入图片描述 这下完美了! 舒服=。=

总结

在处理数据之前,检查所分析的数据格式是非常重要的!