TypeError:列表对象不可删除

时间:2010-07-13 09:47:39

标签: python

totalCost = problem.getCostOfActions(self.actions)

5 个答案:

答案 0 :(得分:14)

看起来您正在尝试使用列表作为字典中的键或类似的东西。列表不可清除,因此它们不能用作字典键或集合。

另一方面,python会在发生此类错误时为您提供堆栈跟踪,其中包括文件名和行号。您应该能够使用该跟踪来查找有问题的代码。

修改关于stacktraces:

cat > script.py
foo = [1,2,3]
bar = {}
bar[foo] = "Boom"
print "Never happens"

python script.py
Traceback (most recent call last):
  File "script.py", line 3, in <module> // this is the file and the line-number
   bar[foo] = "Boom"
TypeError: unhashable type: 'list'

答案 1 :(得分:6)

您可能尝试使用列表等可变对象作为字典的键或作为集合的成员。无法有效且可预测地跟踪可变项以用于此类用途,因此它们不提供散列特殊属性。

答案 2 :(得分:1)

将不可用类型添加到集合时会产生错误。

>>> s=set((1,2))
>>> a.add([3,4])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

我认为这也可能是你的情况。使用元组而不是列表:

>> a.add((3,4))
>>> 

答案 3 :(得分:0)

也许这条线应该是这样的

totalCost = sum(map(problem.getCostOfActions,self.actions))

或者如果您更喜欢生成器表达式

totalCost = sum(problem.getCostOfActions(action) for action in self.actions)

由于我看不到您的代码,我认为problem.getCostOfActions()会返回单个操作的费用,因为如果self.actions是列表,这可能会导致您获得的错误

或者,您可以修复函数problem.getCostOfActions(),以便按名称建议返回操作列表的总成本。

如果您想要帮助解决问题,请考虑将此功能的正文添加到您的问题中

答案 4 :(得分:0)

我和django有同样的错误: food_list = ['垃圾邮件','更多垃圾邮件','垃圾邮件垃圾邮件'] table.cum.add(food_list)

我收到错误 - TypeError:列表对象不可用。

修复是table.cum.add(* food_list) -add *在列表前面解压缩它 模型方法add接受args - (x,y,z)但不接受([x,y,z])

希望有所帮助