문제

나는 2.5 모듈을 3.0으로 포팅하기 위해 노력하고 있습니다. "Builder"클래스는 다음과 같습니다.

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

그러나 오류는 다음과 같습니다.

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

트레이스 백으로 :

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

나는 2to3를 통해 그것을 실행하지만 그것을 픽업하지는 않습니다. 내가 알 수있는 한, 업데이트 함수는 인수가 바이트/버퍼 형태 일 것으로 기대하지만,이를 변환하기 위해 여러 가지 다른 방법을 시도했지만 성공하지 못했습니다.

항상 그렇듯이 모든 도움은 크게 감사 할 것입니다. :)

도움이 되었습니까?

해결책

나는이 줄을 추측하고있다 :

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

가야합니다 :

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

실제 원하는 인코딩은 귀하의 경우에 다를 수 있지만 UTF-8은 모든 경우에 작동합니다.

다른 팁

나는 아직 3.0을 시도하지 않았다. 그러나 이제는 일련의 바이트와 문자열 사이에 더 큰 차이가 있습니다. 후자는 유니 코드 코드 포인트를 보유하고 전자는 유니 코드를 보유하지 않고 encoded 유니 코드 문자열. 해시는 바이트 시퀀스에서 작동합니다. 따라서 (유니 코드) 스트링을 먼저 해시에 먹이게하는 바보를 인코딩해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top