我遇到了一些代码,这些代码在python3.6中不再有效,但在以前的所有版本中都表现良好。我发现问题实际上是类中某个包含ZipFile的字段。下面是一个引发错误的简短程序:
from pickle import dumps
import io
import zipfile
raw = b""
foo = zipfile.ZipFile(io.BytesIO(raw), mode="w")
dumps(foo)我得到了这个错误:
Traceback (most recent call last):
File "bla.py", line 8, in <module>
dumps(foo)
TypeError: can't pickle _thread.RLock objects因此,测试程序可以更短:
from pickle import dumps
import threading
dumps(threading.RLock())我比较了Python3.5和3.6的zipfile.py,但在ZipFile的_lock字段方面没有发现任何差异,所以看起来threading模块有变化-但在threading.py中版本之间也没有明显的变化。
为什么它不再是可拾取的?在我可以腌制ZipFile之前,我需要做些什么吗?
编辑:好的在搜索了一段时间后,我偶然发现了这个python bug跟踪器条目:https://bugs.python.org/msg284751,所以在python中ZipFile是可拾取的<3.6实际上是bug……我想我现在需要修改很多代码……
https://stackoverflow.com/questions/44485539
复制相似问题