2012-06-15 128 views
0

我有一个ints(hitTableWord)的列表,我试图在整个列表的数字的绝对值上加1,并且我一直在python中得到这个错误信息:metric = metric + 1/(abs(metricNumber)) TypeError:不支持的操作数类型为+:'type'和'float'。公制初始化为:公制= 0在python中输入错误

事情是我是菜鸟程序员,不知道它是什么意思。

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

任何帮助,将不胜感激。像往常一样,我确信这简直是荒谬的,我只是不知道。非常感谢您的耐心。

+3

'metric'没有在你的榜样初始化。它是什么? – robert

回答

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): 
+0

或metric = object() – Will

+1

@确实如此。实际上,将'()'关闭的赋值可能比'class metric'更可能出现错误。我已经更新了我的答案以包含该案例。 – lvc

+0

好点。 +1,兄弟。 – Will

0

我假设hitTableWord仅包含数字,你可以去看看你在哪里定义度量?这个错误意味着你试图将两种不同类型的变量放在一起,并且Python不能对给定类型执行此操作,类似于不能将字符串添加到整数或将整数连接到字符串。

举个例子:

5 + "abc" 

这里,再加上工作的算术运算符,这不处理字符串。

"abc" + 5 

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

0

你用0初始化了那个度量标准,但我想它不是这样的。您在metric变量中的值为type。这是这里的问题。

+0

伊戈尔,你说得对。我把它定义为一个浮点数。它现在有用,谢谢 –

0

如何

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)