所以我在我有一个递归调用的行上得到了这个错误。发生错误的行看起来像: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
和其他技巧但到目前为止都没有成功。
谢谢!
答案 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中无法在None
和float
之间进行减法操作。
跟踪您的函数并确保它始终返回一个数值,并且不应该发生该问题。 或者,更改代码以检查None
的返回(如@daknok所示)并避免出现问题 - 但是,最好在源IMO上防止出现问题。< / p>
请注意下面@burhan Kahlid的优秀评论。
答案 2 :(得分:0)
你的修复
return some_func(x) - .2 and x not None and float(x) is True
至少有三个原因无效。
Python懒惰地评估and
s。
即,A and B
首先评估A
,然后如果A
为真则评估B
。在您的情况下,评估A
会导致异常,因此您甚至无法访问B
。
不是x is not None
,而不是x not None
。
问题是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
。这也可能是您问题的根源。