当列表具有正确的索引时,我不断在Python中获得“列表索引超出范围”

时间:2011-08-17 17:37:06

标签: python list

我是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 :(得分: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永远不会抱怨它。如果它抱怨,那就错了。这是 简单。

现在找出列表太短的原因。您可以打印数组,并立即查看错误。