因此,我在进行递归调用的行上遇到了此错误。发生错误的行如下所示: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
了 , 和其他技巧,但到目前为止没有成功。
谢谢!
因此,我在进行递归调用的行上遇到了此错误。发生错误的行如下所示: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
了 , 和其他技巧,但到目前为止没有成功。
谢谢!
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
。
在没有看到您的代码的情况下,错误消息似乎暗示您的函数在某些时候some_func(x)
返回None
。正如消息所述,您在 Python 中无法进行None
和之间的减法运算。float
跟踪您的函数并确保它始终返回一个数值并且不应该出现该问题。或者,更改您的代码以检查返回None
(如@daknok 所示)并以这种方式避免问题 - 但是,最好在源 IMO 处防止问题。
请注意下面@burhan Kahlid 的出色评论。
你的修复
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
。这也可能是您问题的根源。