2008-12-05 5 views
2

나는 3.0으로 포팅 된 2.5 모듈을 얻고 자 노력 해왔다. 클래스 "빌더"의 초기화로 있습니다3.0의 "hashlib"모듈에 관한 문제

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

하지만 오류가 발생 : 나는했습니다

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 

: 그 역 추적으로이

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

2to3을 통해 실행 시키지만, 실제로는 실행되지 않습니다. 늘어나는만큼 내가 말할 수있는, 업데이트 함수는 인수가 바이트/버퍼의 형태로 기대하고 있지만 그것을 변환하는 여러 가지 방법을 시도하고 성공하지 못했습니다.

항상 그렇듯이 도움을 주시면 대단히 감사하겠습니다. :)

답변

4

나는이 줄 같은데요.

+0

이 오류를 성공적으로 수정했으며이 작업에 대한 추가 정보를 얻었습니다. 축하해 주셔서 감사합니다. –

0

나는 아직 3.0 시도했다. 그러나 바이트 시퀀스와 문자열 사이에는 더 큰 차이점이 있습니다. 후자는 유니 코드 코드 포인트를 보유하고 전자는 유니 코드를 보유하지 않지만 오직 encoded 유니 코드 문자열만을 보유합니다. 해시는 일련의 바이트에서 작동합니다. 그래서 여러분은 (유니 코드) 문자열을 먼저 해시에 먹이로 인코딩해야합니다.

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

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

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

이 될해야합니다