0

因此,我在进行递归调用的行上遇到了此错误。发生错误的行如下所示: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了 , 和其他技巧,但到目前为止没有成功。

谢谢!

4

3 回答 3

3

some_func(x)return 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

于 2012-10-14T13:30:48.047 回答
0

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

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

请注意下面@burhan Kahlid 的出色评论。

于 2012-10-14T13:29:25.190 回答
0

你的修复

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

至少有三个原因不起作用。

  1. Python 懒惰地评估ands。

    也就是说,首先A and B评估A,然后如果A为真则评估B。在您的情况下,评估A会导致异常,因此您甚至永远不会到达B.

  2. 不存在的检查是x is not None,不是x not None

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


无论如何,解决方案不是从可能是的值中减去浮点数None。最好的方法是确保some_func永远不会返回None,您可以通过修改其代码来做到这一点。下一个最好的方法是检查返回值,您可以这样做

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

注意,顺便说一句,如果一个函数没有返回任何东西,那么它被认为是隐式返回None的。None因此,如果这样做,上面的代码将返回some_func。这也可能是您问题的根源。

于 2012-10-14T13:50:55.263 回答