Question

Je travaille sur le portage du module 2.5 vers la version 3.0, principalement pour ma propre formation, lorsque je suis bloqué. La classe "Constructeur" a pour init:

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

Mais l'erreur se produit à:

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

qui a pour tracé:

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

Je l'ai passé en revue via 2to3, mais cela ne le détecte pas. Autant que je sache, la fonction de mise à jour s'attend à ce que l'argument se présente sous la forme d'octets / tampon, mais j'ai essayé plusieurs méthodes différentes pour le convertir et cela n'a pas abouti.

Comme toujours, toute aide serait grandement appréciée. :)

Était-ce utile?

La solution

Je suppose que cette ligne:

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

devrait devenir:

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

Le codage souhaité peut être différent dans votre cas, mais UTF-8 fonctionnera dans tous les cas.

Autres conseils

Je n'ai pas encore essayé la version 3.0. Mais il existe maintenant une plus grande distinction entre une séquence d'octets et de chaînes. Les derniers contiennent des points de codage Unicode, tandis que les premiers ne contiennent pas de Unicode, mais uniquement des chaînes Unicode encodées . Les hachages fonctionnent sur des séquences d'octets. Vous devrez donc d'abord encoder vos chaînes (unicode) avant de les alimenter en un hachage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top