我想在我的应用程序中使用Whoosh并遵循2011年编写的教程here。
当我尝试取消该块中的数据时:
def results_to_instances(request, results):
instances = []
for r in results:
cls = pickle.loads('{0}'.format(r.get('cls')))
id = r.get('id')
instance = request.db.query(cls).get(id)
instances.append(instance)
return instances
我从pickle.loads()命令收到错误:
TypeError: 'str' does not support the buffer interface
当我检查'{0}'.format(r.get('cls'))
返回的内容时,它是str类型,但值为"b'foo'"
。
如何从字符串中获取bytes对象?对其进行编码只会返回b"b'foo'"
。
这个值在这个块中被腌制:
def first_index(self, writer):
oid = u'{0}'.format(self.id)
cls = u'{0}'.format(pickle.dumps(self.__class__))
attributes = []
for attr in self.__whoosh_value__.split(','):
if getattr(self, attr) is not None:
attributes.append(str(getattr(self, attr)))
value = u' '.join(attributes)
writer.add_document(id=oid, cls=cls, value=value)
因此,如果有办法在根处修复它,那就更好了。
答案 0 :(得分:0)
只需使用r.get('cls')
即可。将其'{0}'.format()
包装在一起会bytes
进入str
,这根本不是您想要的。同样适用于包装pickle.dumps
(立即将有用的bytes
转换为无用的格式化版本)。基本上,您对'{0}'.format()
的所有使用都没有意义,因为当您尝试使用原始数据时,它们会生成str
。