当列表有正确的索引时,我总是在Python中得到“list index out of range”

2024-10-03 02:46:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,遇到了列表索引错误,而我不应该这样做。 我有以下变量:

date_array = ['2001','15','1']

我可以访问第一个索引。我只能访问最后一个索引,如果我尝试这样做:

^{pr2}$

每次尝试时都会出现“列表索引超出范围”错误:

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

任何帮助都将非常感谢!这让我发疯了!在


Tags: csvimportre列表datetimedateis错误
3条回答

您确定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值是否是您所想的?另外,在你的回答中加入回溯会对我们有所帮助。在

简单的答案是date_数组并不总是有3个元素。如果要直接索引列表,请添加一个检查以确保长度足够。在

if len(date_array) < 3:
    print('date_array too short')
    # do something else

或者,将索引操作包装在try块中

如果有正确的索引,Python永远不会抱怨它。如果它抱怨,那就错了。这很简单。在

现在找出为什么这个单子太短了。您可以打印出数组,然后立即发现问题所在。在

相关问题 更多 >