[英]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.