我试图使用以下代码将列表转换为集合:
set1=set(list1)
代码运行良好,但突然开始出现以下错误,
set1=set(list1)
TypeError: unhashable type: 'list'
请让我知道我该如何解决。
有时一些运行良好的程序在没有更改参数的情况下突然出错,我该如何调试它?
我试图使用以下代码将列表转换为集合:
set1=set(list1)
代码运行良好,但突然开始出现以下错误,
set1=set(list1)
TypeError: unhashable type: 'list'
请让我知道我该如何解决。
有时一些运行良好的程序在没有更改参数的情况下突然出错,我该如何调试它?
您的列表包含另一个列表:
>>> set([['contained list'], 1, 2])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
集合只能包含可散列的项目;任何不能被变异的标准类型都是可散列的,但 alist
不是(它可以被变异)。相比之下, atuple
是不可变的,可以存储在 a 中set
。
错误会发生,即使在已经运行了一段时间的代码中也是如此。使用 print 语句调试它,或者更好的是,使用像pdb这样的调试器。
如果您的错误只是间歇性地出现,请使用try
/except
块来捕获错误,然后打印出信息或使用调试器来找出发生了什么:
try:
set1=set(list1)
except TypeError:
print 'list1 not hashable? contents: %r' % list1
# optionally: import pdb; pdb.set_trace()
raise
您的错误表明您的列表包含一个列表。列表是可变的,因此不能被散列用于集合或字典。一种解决方法是使用 将列表转换为元组tuple(some_list)
,但如果它们嵌套严重,它会变得更加复杂。