python 中的 IndexError: list index out of range
这是代码:records={}file=open(filepath,'r')forlineinfile.readlines():r=line.split('\t')pri...
这是代码:
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
这是什么问题啊。。 展开
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
这是什么问题啊。。 展开
5个回答
展开全部
”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为报错的变量,这样就能清楚掉空格了,运行速度也快了。
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
这样就避免了空行,字段数不足,以及类型转换出错。
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])也可能出异常的,需要保护
另外 int(r[0]) 或者int(r[1])也可能出异常的,需要保护
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
IndexError:索引越界
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询