Ich wollte meine Anwendung in Wäscht verwenden und anschließend das Tutorial here, die im Jahr 2011Get Bytes Objekt von Bytes in String-Objekt zitiert
geschrieben Wenn ich versuche, Daten unpickle in diesem Block:
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
ich einen Fehler von den pickle.loads get() Befehl:
TypeError: 'str' does not support the buffer interface
Wenn ich was '{0}'.format(r.get('cls'))
kehrt zu überprüfen, ist es type str, aber der Wert ist "b'foo'"
.
Wie bekomme ich das Byte-Objekt aus der Zeichenfolge? Die Codierung gibt nur b"b'foo'"
zurück.
Die Werte werden in diesem Block gebeizt:
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)
Also, wenn es eine Möglichkeit, ist es an der Wurzel zu beheben, das besser sein würde.
Funktioniert die '' {0} '' nicht? Ein Beispiel für das vollständige Ergebnis ist "b" \ x80 \ x03cserver.models.models \ ntext \ nq \ x00.'' – Niel
Schnell ausprobiert, bekomme ich den gleichen Fehler. Obwohl 'r.get ('cls')' ''b'foo'' zurückgibt, ist es immer noch type str. Was bedeutet das? – Niel
@Niel: Es ist, weil Sie auch den gleichen Fehler hatten, als Sie es einlegten. Sie haben in ein 'format' gewickelt, das die' Bytes' in 'str' konvertiert. Alle '{0} '. Format (x)' does ist stringify 'x' (es ist in den allermeisten Fällen gleichbedeutend mit' str (x) '), aber Gurken sind ein binäres Datenformat und haben kein Geschäft konvertiert zu 'str'. – ShadowRanger