算术与Python程序的结果

时间:2016-01-25 20:07:48

标签: python function debugging typeerror procedure

我在python中定义了一个输出数字的过程,并希望在两个不同的输入上添加调用过程的结果。但是,当我尝试对过程的结果执行算术时,我会看到错误消息

  

TypeError:不支持的操作数类型 - :'NoneType'和   'NoneType'。

我尝试使用int()函数,但显然这不能对'NoneType'结果进行操作。我将如何添加两个结果?

有问题的代码段是:

def leapYear(year):
    if year % 4 != 0:
        year = 365
    else:
        if year % 100 != 0:
            year = 366
        else:
            if year % 400 != 0:
                year = 365
            else:
                year = 366

def daysBetweenDates(year1, month1, day1, year2, month2, day2):
    dpY = leapYear(year2) - leapYear(year1)

这是我尝试解决Udacity问题的一部分(我对编码相对较新)。

2 个答案:

答案 0 :(得分:1)

您需要显式返回您要使用的函数的结果。因此,您需要在leapYear函数的末尾添加以下行:

return year

只有一个缩进级别。

完整示例:

def leapYear(year):
    if year % 4 != 0:
        year = 365
    else:
        if year % 100 != 0:
            year = 366
        else:
            if year % 400 != 0:
                year = 365
            else:
                year = 366
    return year

def daysBetweenDates(year1, month1, day1, year2, month2, day2):
    return leapYear(year2) - leapYear(year1)

如果未显式返回值,则Python函数返回None值。

话虽如此,您可以使用datetime模块,特别是datetime.timedelta对象,让您的生活更轻松。

答案 1 :(得分:0)

您忘记在year程序中返回leapYear(),默认情况下会返回None
使用此:

def leapYear(year):
    if year % 4 != 0:
        year = 365
    else:
        if year % 100 != 0:
            year = 366
        else:
            if year % 400 != 0:
                year = 365
            else:
               year = 366
    return year

def daysBetweenDates(year1, month1, day1, year2, month2, day2):
    dpY = leapYear(year2) - leapYear(year1)