Domanda

Ho lavorato per ottenere il porting di un modulo 2.5 su 3.0, principalmente per la mia educazione, quando mi sono bloccato. La classe " Builder " ha come init:

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

Ma l'errore si verifica in:

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

che ha come traceback:

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

L'ho passato attraverso 2to3, ma non lo sta rilevando. Per quanto posso dire, la funzione di aggiornamento si aspetta che l'argomento sia sotto forma di byte / buffer, ma ho provato diversi metodi per convertirlo e non ci sono riuscito.

Come sempre, qualsiasi tipo di assistenza sarebbe molto apprezzata. :)

È stato utile?

Soluzione

Suppongo che questa riga:

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

dovrebbe diventare:

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

La codifica desiderata effettiva potrebbe essere diversa nel tuo caso, ma UTF-8 funzionerà in tutti i casi.

Altri suggerimenti

Non ho ancora provato 3.0. Ma ora esiste una distinzione maggiore tra una sequenza di byte e stringhe. Quest'ultimo contiene punti di codice Unicode mentre il primo non contiene Unicode ma solo stringhe di Unicode codificate . Gli hash funzionano su sequenze di byte. Quindi dovrai prima codificare le tue stringhe (unicode) bevore alimentandole in un hash.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top