【发布时间】: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 做到了。