2016-10-12 2 views
0

저는 2.7에서 사용할 수없는 라이브러리를 사용할 수 있도록 Python 2.7 스크립트 세트를 Python 3.5로 이식했지만이 코드에서 MemoryError를 얻고 있습니다. 이전에 작동했던 :Hashlib MemoryError Python 3.5에서 2.7은 아니지만

import hashlib, functools 
sha2h = hashlib.sha256() 
with open('/path/to/any/file', 'rb') as f: 
     [sha2h.update(chunk) for chunk in iter(functools.partial(f.read, 256), '')] 

내가 알 수있는 한, 이것은 파일의 SHA256 해시를 얻는 적절한 방법입니다. 이 문제에 관해서는 아무 것도 찾을 수없는 것 같습니다. 도움이된다면, 여기에 위의 코드는 쉘에서 실행되는 역 추적입니다 :

File "<stdin>", line 2, in <module> 
File "<stdin>", line 2, in <listcomp> 

는 또한 hashlib에 대한 문서와 일치하는

sha2h = hashlib.new('sha256') 

sha2h = hashlib.sha256() 

를 교체하려고는하지만, 이것은 결과에 변화를주지 않았다.

도움이나 의견이 있으면 크게 감사하겠습니다.

답변

0

파이썬 3 일, 당신은 iter 호출에 대한 감시 값으로 b'' 대신 ''을 설정해야합니다 정말이 같은 부작용을위한 지능형리스트를 사용하지 않아야 또한

iter(functools.partial(f.read, 256), b'') 

당신을하지만, 이를 수행하는 기존 코드를 이식하는 경우에는 지금 당장 그대로 두는 것이 가장 좋습니다.

+0

고맙습니다! 이 변경으로 인해 문제가 해결되었습니다. – Nstr10

+0

당황 스럽지만, 이것은 내가 원래 작성한 코드입니다. 지나치게 야심 찬 "Hello world"프로젝트입니다. 이 파이썬 초보자에게 도움이된다면, 이것을 할 수있는 더 적절한 방법을 제안 할 수 있습니까? – Nstr10

+0

@ Nstr10 : 일반적인 'for' 루프를 사용하십시오. – user2357112

관련 문제