Hashlib MemoryError在Python 3.5中出现,但在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'')

对于这样的副作用,你也不应该使用列表推导式,但是如果你移植的是已经存在的代码,那么现在最好还是不要使用它。

相关内容

  • 没有找到相关文章

最新更新