在Python中,当列表有正确索引时,我不断遇到“列表索引超出范围”错误
我刚开始学习Python,遇到了一个列表索引错误,但我觉得不应该出现这个问题。
我有一个这样的变量:
date_array = ['2001','15','1']
我可以访问第一个索引。如果我尝试这样做:
date_array[-1]
我就会得到“列表索引超出范围”的错误,每次尝试时都是这样:
date_array[2]
date_array[1]
我把完整的代码附在下面,供你参考:
import csv
import datetime
import re
marketReader = csv.reader(open('test.csv', 'rb'))
i=0
for row in marketReader:
cust_id = row[0]
date = row[1] # Is a text. Ex: '2002-1-1'
spent = row[2]
date_array = (re.split('-',date)) # Provides an array ['2002', '1', '1']
year = date_array[0]
month = date_array[1]
day = date_array[2]
# Is weekday?
weekday=datetime.date(year,month,day).weekday()
if i==200 and row[0]>3 :
break
pass
#print(day)
i += 1
任何帮助都会非常感谢!这让我很烦恼!
3 个回答
0
如果你用的索引是正确的,Python就不会抱怨。如果它抱怨了,那就说明你用错了索引。就是这么简单。
现在你需要找出为什么列表太短了。你可以打印出这个数组,马上就能看到哪里出问题了。
0
你确定 date
里面是用连字符分隔的日期字符串吗?如果是这样的话,这段代码应该能正常运行:
>>> import re
>>> date_array = (re.split('-',date))
>>> date_array
['2002', '1', '1']
>>> date_array[0]
'2002'
>>> date_array[1]
'1'
>>> date_array[2]
'1'
也许你可以加上 print date
来确认一下 date
的值是不是你想的那样?另外,把错误信息也放在你的回答里会对我们有帮助。
2
简单来说,date_array这个列表不一定总是有3个元素。如果你直接访问这个列表的某个位置,记得先检查一下它的长度是否足够。
if len(date_array) < 3:
print('date_array too short')
# do something else
或者,你也可以把访问列表的操作放在一个try块里,这样可以避免错误。