Python 3.5中的Hashlib MemoryError,但2.7中没有

时间:2016-10-12 17:37:44

标签: python python-3.x hashlib functools

我一直在将一组Python 2.7脚本移植到Python 3.5中,这样我就可以使用2.7中没有的一些库,但是我从之前运行的代码中得到了MemoryError:

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哈希的正确方法。我似乎无法找到关于这个问题的任何内容。如果它有帮助,这里是从shell运行上述代码时的回溯:

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

还尝试更换

sha2h = hashlib.sha256()

sha2h = hashlib.new('sha256')

匹配hashlib的文档,但结果没有变化。

非常感谢任何帮助或见解!

1 个答案:

答案 0 :(得分:0)

在Python 3上,您需要设置b''而不是''作为iter调用的标记值:

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

你也不应该对这样的副作用使用列表理解,但是如果你移植现有的代码,那么最好暂时离开它。