Frage

Ich habe Arbeit wurde eine 2.5-Modul 3.0, vor allem für meine eigene Ausbildung portierte auf immer, wenn ich bekommen habe stecken. Die Klasse "Builder" hat als init:

def __init__(self, **options):
    self._verifyOptions(options)
    self._options = options
    self._initDigest()
    self._initBuildNames()
    self._methods = []

Aber der Fehler tritt auf:

def _initDigest(self):
    import os, sys, hashlib
    digester = hashlib.md5()
    digester.update(self._options.get('code'))
    self._digest = digester.hexdigest()

, die hat als seine Zurückverfolgungs:

Traceback (most recent call last):
  File "<pyshell#5>", line 5, in <module>
    """, language="Cee")
  File "C:\Python30\lib\site-packages\PyInline\__init__.py", line 31, in build
    b = m.Builder(**args)
  File "C:\Python30\lib\site-packages\PyInline\Cee.py", line 17, in __init__
    self._initDigest()
  File "C:\Python30\lib\site-packages\PyInline\Cee.py", line 27, in _initDigest
    digester.update(self._options.get('code'))
TypeError: object supporting the buffer API required

Ich habe es durch 2to3 laufen, aber es zieht an nicht darauf. Soweit ich sagen kann, wird die Update-Funktion das Argument erwartet in Form von Bytes / Puffer zu sein, aber ich habe verschiedene Methoden versucht, es zu konvertieren und nicht gelungen.

Wie immer würde jede Hilfe sehr geschätzt. :)

War es hilfreich?

Lösung

Ich vermute, dass diese Linie:

digester.update(self._options.get('code'))

sollte werden:

digester.update(self._options.get('code').encode("utf-8"))

Die tatsächliche gewünschte Codierung in Ihrem Fall anders sein könnte, aber UTF-8 wird in allen Fällen.

Andere Tipps

Ich habe nicht 3.0 noch nicht ausprobiert. Aber es gibt jetzt einen größeren Unterschied zwischen einer Folge von Bytes und Strings. Letztere halten Unicode-Codepoints während der ehemaligen halten nicht Unicode aber nur encoded Unicode-Strings. Hashes arbeiten auf Sequenzen von Bytes. So müssen Sie Ihre (Unicode) Zeichenfolgen codieren ersten bevore sie zu einem Hash-Fütterung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top