python中的类型错误

Posted

技术标签:

【中文标题】python中的类型错误【英文标题】:type error in python 【发布时间】:2012-06-15 13:14:46 【问题描述】:

我有一个整数列表 (hitTableWord),我试图在整个列表的数字的绝对值上加 1,我在 python 中不断收到此错误消息:metric = metric + 1/(abs(metricNumber )) 类型错误:+ 不支持的操作数类型:'type' 和 'float'。 metric 被初始化为:metric = 0

事情是我是一个菜鸟程序员,不知道这意味着什么。

 for a in range (0, len(hitTableWord)):
         output_file.write('Hit Word: '+ str(hitTableWord[a]) +' ' + str(hitTableNear[a])+ ', ')
         metric = metric + 1/(abs(hitTableWord[a]))

任何帮助将不胜感激。像往常一样,我的问题肯定是我不知道的简单得可笑的事情。感谢您的耐心等待。

【问题讨论】:

metric 在您的示例中未初始化。这是什么? 【参考方案1】:

似乎metric 是您在某处定义的类,而不是实例 - 即,您有类似的东西:

class metric(object):
    pass

您需要调用metric() 来获取它的实例。请注意,如果metric 没有定义__add__,您将继续收到非常类似的错误。

同样,您可能无意中做了:

metric = someclass

当你的意思是:

metric = someclass()

无论哪种方式,错误消息都是说metric 包含一个,而Python 不知道如何将类添加到浮点数(或者,就此而言,添加到任何东西)。

还有:

for a in range (0, len(hitTableWord)):

这是您通常不需要在 Python 中执行的操作。在这里您使用它是因为您需要访问 hitTableWordhitTableNear 的相关元素 - 您可以更惯用地这样做:

for word, near in zip(hitTableWord, hitTableNear):

【讨论】:

@Will 确实如此。事实上,将() 排除在这样的分配之外可能比class metric 更容易出错。我已更新我的答案以包含该案例。 感谢您的帮助。此外,关于循环的信息非常有帮助。谢谢你【参考方案2】:

我假设hitTableWord 只包含数字,你能看看你定义度量的地方吗?该错误表示您正在尝试将两种不同类型的变量添加在一起,并且 Python 无法对给定类型执行此操作,类似于您无法将字符串添加到整数或将整数连接到字符串。

举个例子:

5 + "abc" 

这里,加号用作算术运算符,这不适用于字符串。

"abc" + 5  

这里,加号表示字符串连接,这不适用于整数。

【讨论】:

【参考方案3】:

你用 0 来编写这个指标。但我想不是这样的。在metric 变量中有一个type 类型的值。这就是问题所在。

【讨论】:

伊戈尔,你是对的。我把它定义为一个浮点数。现在可以使用了,谢谢【参考方案4】:

怎么样

from itertools import izip

metric = 0.
for tw,tn in izip(hitTableWord, hitTableNear):
    output_file.write("Hit Word:  ".format(tw,tn))
    metric += 1./abs(tw)

【讨论】:

以上是关于python中的类型错误的主要内容,如果未能解决你的问题,请参考以下文章

类型错误:Python 中的“列表”不支持“<”

python中的DES加密错误(TypeError:对象类型<class'str'>不能传递给C代码)

如何修复Python中的“OverSampling”错误

python 3.5代码中的变量需要类型注释

Python学习篇 Python中的常见的BUG及异常处理

Python学习篇 Python中的常见的BUG及异常处理