python中的返回类型错误

时间:2012-10-14 13:28:23

标签: python

所以我在我有一个递归调用的行上得到了这个错误。发生错误的行看起来像:return some_func(x) - .2

TypeError: unsupported operand type(s) for -: 'NoneType' and 'float'

我尝试return some_func(x) - .2 and x not None and float(x) is True和其他技巧但到目前为止都没有成功。

谢谢!

3 个答案:

答案 0 :(得分:3)

some_func(x)返回None,你无法从None中减去一个浮点数 - 这没有任何意义。根据您的需要,您可以确保some_func(x)永远不会返回None(通过更改some_func的实施方式),或者执行此操作:

y = some_func(x)
if y is not None:
    return y - .2
else:
    return None

最后两行可以省略,因为Python中的函数隐式返回None

答案 1 :(得分:0)

在没有看到您的代码的情况下,错误消息似乎暗示您的函数some_func(x)在某些时候会返回None。正如消息所述,您在Python中无法在Nonefloat之间进行减法操作。

跟踪您的函数并确保它始终返回一个数值,并且不应该发生该问题。 或者,更改代码以检查None的返回(如@daknok所示)并避免出现问题 - 但是,最好在源IMO上防止出现问题。< / p>

请注意下面@burhan Kahlid的优秀评论。

答案 2 :(得分:0)

你的修复

return some_func(x) - .2 and x not None and float(x) is True

至少有三个原因无效。

  1. Python懒惰地评估and s。

    即,A and B首先评估A,然后如果A为真则评估B。在您的情况下,评估A会导致异常,因此您甚至无法访问B

  2. 不是x is not None,而不是x not None

  3. 问题是some_func(x)None,而x不是None。检查后者是无关紧要的。


  4. 无论如何,解决方案不是从可能为None的值中减去浮点数。执行此操作的最佳方法是确保some_func永远不会返回None,您可以通过修改其代码来执行此操作。接下来最好是检查返回值,您可以将其作为

    output = some_func(x)
    if output is not None:
        return output - 0.2
    

    顺便说一下,如果函数没有返回任何内容,那么它被认为是隐式返回None。因此,如果None,上述代码将返回some_func。这也可能是您问题的根源。