python错误“;列表索引必须是整数,而不是非非类型”;

python错误“;列表索引必须是整数,而不是非非类型”;,python,python-2.7,Python,Python 2.7,我是python新手,从Udacity学习python语言。我想编写一个python程序,它接受两个日期并输出这两个日期之间的日差,假设第二个日期是后者 它抛出了一个错误,即: File /Users/gonewiththewind/Documents/days old.py", line 20, in daysBetweenDates currentDaysOfMonths = daysOfMonths[isLeap(year)][month - 1] TypeError: list

我是python新手,从Udacity学习python语言。我想编写一个python程序,它接受两个日期并输出这两个日期之间的日差,假设第二个日期是后者

它抛出了一个错误,即:

File /Users/gonewiththewind/Documents/days old.py", line 20, in daysBetweenDates
    currentDaysOfMonths = daysOfMonths[isLeap(year)][month - 1]
TypeError: list indices must be integers, not NoneType"
when I tried to call the function by "daysBetweenDates(1995,7,28,2018,1,26)
代码如下:

daysOfMonths = [[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]]


def isLeap(year):
    if year % 400 == 0:
        return True
    else:
        if year % 100 == 0:
            return False
        else:
            if year % 4 == 0:
                return True

def daysBetweenDates(year1, month1, day1, year2, month2, day2):
    counter = 0
    month = month1
    year = year1
    day = day1
    while(year != year2 or month != month2 or day != day2):
        currentDaysOfMonths = daysOfMonths[isLeap(year)][month - 1]

        if(day < currentDaysOfMonths):
            day = day + 1
            counter = counter + 1
            print 'counter = '+ counter
        else:
            day = 1
            if(month1 < 12):
                month = month + 1
            else:
                month = 1
                year = year + 1
            counter = counter + 1
            print 'counter = '+ counter

    return counter
daysOfMonths=[[31,28,31,30,31,31,31,30,31,30,31],[31,29,31,30,31,30,30,31]]
def isLeap(年度):
如果年份%400==0:
返回真值
其他:
如果年份%100==0:
返回错误
其他:
如果第%4年==0:
返回真值
def日期之间的日期(第1年、第1个月、第1天、第2年、第2个月、第2天):
计数器=0
月=月1
年份=年份1
天=第1天
而(年!=年2或月!=月2或日!=日2):
currentDaysOfMonths=daysOfMonths[isLeap(年)][月份-1]
如果(天<当前天/月):
天=天+1
计数器=计数器+1
打印“计数器=”+计数器
其他:
天=1
如果(月1<12):
月=月+1
其他:
月份=1
年份=年份+1
计数器=计数器+1
打印“计数器=”+计数器
返回计数器

您的
is\u leap
功能中缺少一个
返回:

def isLeap(year):
    if year % 400 == 0:
        return True
    else:
        if year % 100 == 0:
            return False
        else:
            if year % 4 == 0:
                return True
            else:
                return False  # <-- here!

这是否更具可读性通常取决于具体情况。但是在这里,使用多个嵌套分支,我认为这有助于保持缩进级别较低,并了解发生了什么。

您的
is_leap
函数中缺少了
返回:

def isLeap(year):
    if year % 400 == 0:
        return True
    else:
        if year % 100 == 0:
            return False
        else:
            if year % 4 == 0:
                return True
            else:
                return False  # <-- here!

这是否更具可读性通常取决于具体情况。但在这里,由于有多个嵌套分支,我认为这有助于保持较低的缩进级别并了解发生了什么。

为了帮助理解,daysOfMonths是一个包含两个数组的数组,其中它们表示闰年和非闰年每月的天数。为了帮助理解,daysOfMonths是一个包含两个数组的数组,其中它们表示闰年和非闰年的每月天数。