Python错误不支持的操作数类型

2024-06-01 07:57:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写NaiveBayes分类器,但一直收到以下错误:

Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
import naive_assignment
File "C:\Python27\naive_assignment.py", line 655, in <module>
main()
File "C:\Python27\naive_assignment.py", line 650, in main
pans.append(p.classify(row))
File "C:\Python27\naive_assignment.py", line 597, in classify
less50Kcp = less50Kcp + self.less_cat_probs.get(query[4])
TypeError: unsupported operand type(s) for +: 'float' and 'NoneType'

我很确定如何修复它,因为大多数修复程序都会返回一些内容,但已经在代码中了。在

^{pr2}$

我知道这不是最好的编码方式。 调用此函数的主要函数是:

def main():

data = getInputData('./trainingset.txt')
test = getInputData('./queries.txt')

p = nbayes(data)
p.train()

pans = []

for row in test:
    pans.append(p.classify(row))
print("n-bayes")
print(pans)


main()

有人知道怎么解决这个问题吗?在


Tags: inpyformainlinefilerowmodule
1条回答
网友
1楼 · 发布于 2024-06-01 07:57:47

self.less_cat_probs.get(query[4])显然计算结果是None-您需要检查并避免它,或者修复生成它的代码。在

错误消息很好地解释了这一点—它抛出了一个不受支持的类型错误,并告诉您不能在给定的行中向NoneType添加float。我们可以看到less50Kcp是一个浮点数,另一个项目必须是None,因此出现错误,因为None不是数字。在

一个可能的修复假设self.less_cat_probs是一个dict,它将为^{}提供一个默认值0,这样当找不到密钥时,加法仍然有效。E、 g组:

less50Kcp = less50Kcp + self.less_cat_probs.get(query[4], 0)

然而,有一个问题是,这是否是所需的功能-您可能希望确保您在dict中有需要的条目,并且您可能希望在结果中重复此修复。在

请注意,您给我们的代码是一个非常糟糕的复制/粘贴编码示例-这会导致更多的错误、更难的维护、更多的bug和更多的输入。我强烈建议您正确地执行此操作,减少使用循环和数据结构的重复代码,这样可以更容易地发现错误。在

相关问题 更多 >