我一直在试图从数据库中取出一些词典。我又回到了使用marshal模块,但仍在想为什么pickle在取消数据序列化方面遇到了如此困难。下面是一个命令行python会话,它基本上显示了我要做的事情:
>>> a = {'service': 'amazon', 'protocol': 'stream', 'key': 'lajdfoau09424jojf.flv'}
>>> import pickle; import base64
>>> pickled = base64.b64encode(pickle.dumps(a))
>>> pickled
'KGRwMApTJ3Byb3RvY29sJwpwMQpTJ3N0cmVhbScKcDIKc1Mna2V5JwpwMwpTJ2xhamRmb2F1MDk0MjRqb2pmLmZsdicKcDQKc1Mnc2VydmljZScKcDUKUydhbWF6b24nCnA2CnMu'
>>> unpickled = pickle.loads(base64.b64decode(pickled))
>>> unpickled
{'protocol': 'stream', 'service': 'amazon', 'key': 'lajdfoau09424jojf.flv'}
>>> unpickled['service']
'amazon'
这一切都很好,但是当我在一个类的工厂方法中尝试这种方法时,它看起来像酸洗负荷零件出错。我要加载的字符串的酸洗方式与上述相同。我甚至尝试过复制上面命令行会话中pickle的确切字符串,并尝试取消pickle,但没有成功。下面是后一种尝试的代码:
^{pr2}$
你的代码有效。你是怎么测试的?在
收益率
^{pr2}$经过一些简化,然后在django中调试,我能够解决这个问题。主要问题是资源类本身存在一些错误,这些错误妨碍了资源工厂方法的正确完成。首先,我试图连接一个字符串和字典,这抛出了一个错误。我在类的其他地方也有一些错误,我在这里引用实例变量_service、_protocol和不带''的键(打字错误)。在
无论如何,有趣的是,当我在Django的自定义字段基础结构中使用这段代码时,会捕捉到错误,而且我没有看到任何实际的消息来指示问题。调试语句表明这是加载问题,但实际上是调试语句本身和后面的一些代码有问题。当我试图使用模型属性而不是为我保存的数据定制模型字段来实现这个行为时,错误实际上被正确地打印出来了,我能够快速地进行调试。在
相关问题 更多 >
编程相关推荐