Python“列表索引超出范围”其他规则有效

时间:2016-10-13 16:57:23

标签: python

我尝试制作一个脚本来读出csv文件并确定一些信息。

现在我收到错误:

Traceback (most recent call last):
  File "/home/pi/vullijst/vullijst.py", line 26, in <module>
    startdate = datetime.datetime.strptime (row[0],"%d-%m-%Y")
IndexError: list index out of range

脚本的一部分:

import csv
import datetime
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

#Variabelen
smtpserver = ''
smtplogin = ''
smtppassword = ''
sender = ''
csvfile = '/home/pi/vullijst/vullijst.csv'

#Inlezen CSV File
f = open(csvfile)
csv_f = csv.reader(f, delimiter=';')
today = datetime.datetime.now()

#Tijd bepalen en opstellen E-mail
for row in csv_f:

        startdate = datetime.datetime.strptime (row[0],"%d-%m-%Y")
        enddate = datetime.datetime.strptime (row[1],"%d-%m-%Y")
        if today >= startdate and today <= enddate:
                receiver = row[3]

csv文件具有以下结构:

1-10-2016;12-10-2016;Test 1;test0@email.com;06-123456789 
12-10-2016;13-10-2016;Test 2;test1@email.com;06-123456789 
13-10-2016;14-10-2016;Test 3;test2@email.com;06-123456789 
14-10-2016;15-10-2016;Test 4;test3@email.com;06-123456790 
15-10-2016;16-10-2016;Test 5;test4@email.com;06-123456791 
16-10-2016;17-10-2016;Test 6;test5@email.com;06-123456792 
17-10-2016;18-10-2016;Test 7;test6@email.com;06-123456793

如果我注释掉这条规则,那么我就不会收到以下规则的错误。有人知道出了什么问题吗?

1 个答案:

答案 0 :(得分:0)

您的csv文件最后一行显示空行,在最后一行后显示实际数据。因此,您的脚本会读取所有实际行并处理它们,但是当最后一行被解析为空列表时它会中断。在这种情况下,您尝试解析为日期的row[0]无效。

要避免此问题,请在循环顶部检查,如果row为空,则会跳过循环体的其余部分。

for row in csv_f:
    if not row: # skip empty rows
        continue
    startdate = datetime.datetime.strptime (row[0],"%d-%m-%Y")
    # ...