我刚刚重写了一大块Django代码,这些代码与一个40多岁的状态FSM有关。对于所涉及的三个模型中的每一个,都有很多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+逐行的问题有什么建议吗?
尝试传递--traceback
选项。
检查manage.py
是否有异常吞咽行为;可能类似于:
try:
....
except Exception, exc:
print exc.message
如果您找到了它,请将其改为raise
,这样您就可以看到整个回溯。
如果安装了ipython,可以尝试:ipython -i manage.py test my_app
。然后输入%debug
命令进行调试。