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 中执行的操作。在这里您使用它是因为您需要访问 hitTableWord
和 hitTableNear
的相关元素 - 您可以更惯用地这样做:
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中的类型错误的主要内容,如果未能解决你的问题,请参考以下文章