我在Python 3中发现了以下奇怪的行为:
file = open(path, mode='rb').read()
file_ori = open(self.filePath, mode='rb').read()
m = hashlib.md5()
md5 = m.update(file)
md5 = m.hexdigest()
file = '0x'.encode('ascii') + binascii.hexlify(file)
file_ori = '0x'.encode('ascii') + binascii.hexlify(file_ori)
在这种情况下,我的应用程序迟早会因 free():已损坏的未排序块而崩溃。
如果我将代码更改为:
file = open(path, mode='rb')
file_ori = open(self.filePath, mode='rb')
filecont = file.read()
file_oricont = file_ori.read()
m = hashlib.md5()
md5 = m.update(filecont)
md5 = m.hexdigest()
fileb = '0x'.encode('ascii') + binascii.hexlify(filecont)
fileb_ori = '0x'.encode('ascii') + binascii.hexlify(file_oricont)
应用程序正常运行。
我多次阅读文档,但无法找到此行为的任何原因。有人可能对此有更多了解吗?在我看来,Python和垃圾收集存在一个错误?
我使用python3.4和python3.5进行了测试。
由于 曼努埃尔
答案 0 :(得分:2)
第一个例子:在python 2.7中测试过并告诉我发生错误
第二个例子:您必须知道何时调用f.read()文件中的光标到达文件的末尾,以便另一个f.read()将不输出任何内容,即&# 39;'所以这两个例子是不同的