为什么在Python中返回'NoneType'?

时间:2011-01-17 15:21:08

标签: python

我有一个代码,它基本上解决了Project Euler中的一个问题,旨在找出前20个自然数的LCM。

def GCD(a, b):              #Euclid's algorithim
    if (b == 0):
        return a
    else:
        GCD(b, a % b)

def LCM(a, b):             #LCM(a,b) = a*b/GCD(a,b)
    x = GCD(a, b)
    return ((a * b)/x)

def RFIND(a, b):
    if (b == 20):
        return a
    else:
        RFIND(LCM(a, b), b + 1)

print RFIND(2, 1)

但我在运行时遇到错误。

    return ((a * b)/x)
TypeError: unsupported operand type(s) for /: 'int' and 'NoneType'

我可以知道为什么吗?

3 个答案:

答案 0 :(得分:14)

尝试

def GCD(a, b):              #Euclid's algorithim
    if (b == 0):
        return a
    else:
        return GCD(b, a % b)

您必须返回递归调用返回的值。 RFIND也有类似的问题。

答案 1 :(得分:3)

您错误地实现了递归。

def GCD(a, b):              #Euclid's algorithim
 ...
        return GCD(b, a % b)

def RFIND(a, b):
 ...
        return RFIND(LCM(a, b), b + 1)

答案 2 :(得分:2)

它没有返回NoneType。它正在返回None。该部门表示,它不知道如何划分intNoneType类型,因为这是您要划分的类型。试试例子

>>> 'g'/6
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'str' and 'int'

如你所见,它并没有说它不能分为'g'和6,它说它不能划分'str'和'int'。因此:

>>> 1/None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'int' and 'NoneType'

正如其他人已经指出的那样,它会返回None,因为您忘记了return声明。