我是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
任何帮助都将非常感谢!这让我疯了!
答案 0 :(得分:2)
简单的回答是date_array并不总是有3个元素。如果您要直接索引列表,请添加一项检查以确保长度足够。
if len(date_array) < 3:
print('date_array too short')
# do something else
或者,将索引操作包装在try块
中答案 1 :(得分: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 :(得分:0)
如果你有正确的索引,Python永远不会抱怨它。如果它抱怨,那就错了。这是 简单。
现在找出列表太短的原因。您可以打印数组,并立即查看错误。