【问题标题】:The least helpful error ever: TypeError: unhashable type: 'list' [duplicate]有史以来最没有帮助的错误:TypeError: unhashable type: 'list' [重复]
【发布时间】:2013-12-05 02:53:46
【问题描述】:

我刚刚重写了一大段与 40 多岁的状态 FSM 相关的 Django 代码。所涉及的三个模型中的每一个都有很多 STATE_DEFINITIONS = "4.7.1",并且有很多检查当前状态是 == SOME_STATE 还是在 [ONE_STATE, OR_ANOTHER]。

只有一个地方我使用字典。说其中一个模型看起来像:

class OneModel(models.Model):
    STATUS_ONE = "1.0"
    STATUS_TWO = "2.0"

    STATUS_MAPPING = {
              STATUS_ONE:OtherModel.STATUS_X,
              STATUS_TWO:OtherModels.STATUS_Y,
    }

所有的键都是唯一的字符串,如果我从代码中删除它,同样的事情会发生。

当我python manage.py test my_app 时,我收到可能是有史以来最没有帮助的错误消息: TypeError: unhashable type: 'list' 就是这样,没有它发生的地方,没有上下文。有没有人对如何调试这个不涉及文件中的 800+ 行有任何建议?

【问题讨论】:

  • 将列表作为键传递给字典,但列表是可变的,因此不能是字典键。
  • 当前状态是在集合中使用还是在任何地方用作字典键?
  • 如果将列表转换为元组,则可以将其用作 dict 或 set 键。但是,您还希望元组的元素首先是不可变的。
  • 请阅读问题。我面临的问题是在我的代码中找到错误发生的位置。 --traceback 做到了。

标签: python django testing fsm


【解决方案1】:

尝试传递--traceback 选项。

【讨论】:

  • 谢谢,成功了:)
【解决方案2】:

检查manage.py 的异常吞咽行为;可能是这样的:

try:
    ....
except Exception, exc:
    print exc.message

如果你找到它,请将其改为raise,这样你就可以看到整个回溯。

【讨论】:

  • Manage.py 真的很薄,只是在django.core.management 中的execute_from_command_line 的包装,我将不得不更深入地研究它。感谢您的建议
【解决方案3】:

如果你安装了ipython,你可以试试:ipython -i manage.py test my_app。然后输入%debug命令进行调试。

【讨论】:

  • 好的,正在下载 iPython。有一段时间想试试。下载后会报告我发现的内容
猜你喜欢
  • 2015-03-16
  • 2022-01-01
  • 1970-01-01
  • 2023-02-05
  • 2015-02-11
  • 2019-10-11
  • 2020-03-27
  • 2020-05-11
  • 1970-01-01
相关资源
最近更新 更多