Python 3.5 中的 Hashlib MemoryError 但 2.7 中没有

Hashlib MemoryError in Python 3.5 but not in 2.7

我一直在将一组 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 的文档,但这不会产生任何结果变化。

任何帮助或见解将不胜感激!

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

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

您也不应该像这样对副作用使用列表推导式,但如果您正在移植现有代码,那么最好暂时保留它。