Python TypeError: 不支持的操作数类型,'float' 和 'NoneType' 之间的减法运算。

15
有人知道为什么我会收到这样的错误吗?
TypeError: unsupported operand type(s) for -: 'float' and 'NoneType'

我真的很感激你的帮助,我是新手,正在努力学习,但是我在Python的细节上遇到了很多困难!
代码:
for test in test_set:
 person_id = test['person_id']
 place_id = test['place_id']
 rating = test['rating']
 predicted_rating = simple_nn(person_id, place_id, 5)
 #difference =  (rating - predicted_rating)
 sq_err = (rating - predicted_rating) * (rating - predicted_rating)

 sq_err_sum = sq_err 
   
 sq_err_sum = sq_err_sum + sq_err
    
 rmse = math.sqrt(sq_err_sum/5)
 print rmse

这是我从一本书上得到的一个函数,它计算相似度,我认为那个函数运行得非常完美,但正如我所说,我自己没有编写它。 - MB.
1
请发布该函数。 - TerryA
4个回答

15
根据您提供的信息和错误,这是我的结论:
您只在两个点中使用了减号运算符。
sq_err = (rating- predicted_rating) * (rating - predicted_rating)

由于错误状态为'float'和'NoneType',我们可以得出结论:rating的类型为floatpredicted_rating的类型为NoneType

你定义了predicted_rating如下:

predicted_rating = simple_nn(person_id, place_id, 5)

这意味着在您的simple_nn函数的代码中,某个地方没有返回任何东西。也许如果您使用了条件语句,您没有评估每个结束路径,导致函数仅返回了空值。

例如... 所有这些函数都返回None类型。

def example1():
    pass

def example2():
    return

def example3(a = True, b  = True):
    if not a:
        return True
    elif not b:
        return False

注意,在上一个例子中存在这样一种情况,即两个if条件均未满足的路径...因此可能会返回None。


2
在我的情况下,我忘记添加了。
return

将计算表达式添加到函数定义中。

例如:

def drift(y, t): theta*(mu-y)  # define OUP drift term
def diffusion(y, t): sigma  # define OUP diffusion term

调用时会返回类型为“None”的值,
而,
def drift(y, t): return theta*(mu-y)  # define OUP drift term
def diffusion(y, t): return sigma  # define OUP diffusion term

将返回实际数字。


1

你也可以使用导入除法

从_ _ future _ _中导入除法

在同样的情况下,它对我起作用了


0
我在使用openpyxl时也遇到了这个问题;操作符*应该改变工作表中单元格的值。这个解决方案对我有效;错误是由于具有None值的单元格引起的。添加下面的代码解决了这个问题:
if cell.value:
    corrected_price = cell.value * 0.9
else:
    corrected_price = 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接