繁体   English   中英

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

您也确实不应该对此类副作用使用列表理解,但是,如果要移植执行此操作的现有代码,最好暂时不要使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM