2010-07-13 48 views
0
totalCost = problem.getCostOfActions(self.actions) 
+4

你能发表一些代码吗? – zoli2k 2010-07-13 09:49:22

+10

您发布了太多信息,我仍在处理它。我认为处理如此大量的细节需要一两天的时间。 – pakore 2010-07-13 09:50:26

+1

常见!我们不应该猜测。请张贴一些代码。 – Drakosha 2010-07-13 09:50:45

回答

13

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

另一方面,当发生这种错误时,python会为您提供堆栈跟踪,其中包括文件名和行号。你应该能够用这个追踪有问题的代码。

编辑关于踪迹:

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' 
+0

谢谢... :)让我再看看我的代码 – Shilpa 2010-07-13 09:53:47

+0

可以告诉我如何使用stacktrace?它在哪里 ?我需要什么命令? – Shilpa 2010-07-13 09:58:17

+1

@Shilpa:你从哪里复制错误信息?那里有更多的线路,复制整个地段。 – SilentGhost 2010-07-13 10:01:56

5

你可能尝试使用可变对象如列表,作为密钥字典,或一组中的一员。无法有效且可预测地跟踪可变项目,因此它们不提供哈希特殊属性。

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

也许行应该是这样的,而不是

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

,或者如果你喜欢一个发电机表达

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

因为我看不到你的代码,我认为problem.getCostOfActions()返回单个动作的成本,因为如果self.actions是列表self.actions可能会导致错误

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

考虑加入这一功能的身体你的问题,如果你想帮助修复它

0

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

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

的修复程序table.cum.add(* food_list) -add *盈列表到它解 模型方法附加接受ARGS - (X,Y,Z),但不([X,Y,Z ])

希望它有帮助

相关问题