【问题标题】:python exception: unhashable type: 'list'python异常:不可散列类型:'list'
【发布时间】:2012-02-15 18:27:18
【问题描述】:
 try:
    return [ True, errors[error], error ] # Error found
 except SoapFault as e: #or this could be Exception as e doesn't matter
    print str(e)

我明白了

['soapenv', 'Sender', 'invalid request']
unhashable type: 'list'   

那个不可散列的列表有什么问题,当我尝试print e[2]时,我得到IndexError: tuple index out of range

【问题讨论】:

  • 这段代码的上下文是什么?列表返回后您是否对其进行了处理?
  • 最有可能的“错误”是一个列表,而“错误[错误]”是失败的。试着把它单独放在一条线上。

标签: python exception hash


【解决方案1】:

您正在将列表返回到需要可散列类型的东西,例如 int、字符串或可散列类型的元组。这会导致有关unhashable type: list 的消息。列表是不可散列的,因为它们是可变的;改变它们的内容会改变它们的哈希值,这是不允许的。出现此错误的常见方法是尝试将列表用作 dict 中的键,或用作集合中的项目。

第二个错误,关于tuple index out of range,表示您试图索引一个超出其末尾的元组。这意味着您要索引的不是这个['soapenv', 'Sender', 'invalid request'] 列表,而是其他一些项目。它可能是一个包含该列表的元组,但如果不查看该元组,就不可能说出来。尝试打印其repr()

【讨论】:

    【解决方案2】:

    首先,您确定错误是一个数字而不是像“1”这样的字符串吗?也许这是个问题。 对于第二个答案, e 可能不是一个数组。就在它转换为字符串时,它可能会打印一个包装数组的内容。

    无论如何,请尝试为您的问题提供更多背景信息。编辑它以包含一个以人们可以重现的方式给出错误的测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-22
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      相关资源
      最近更新 更多