totalCost = problem.getCostOfActions(self.actions)
答案 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])
希望有所帮助