我遇到了一些在python 3.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())
我对python 3.5和3.6 zipfile.py
都进行了区分,但是对于_lock
中的ZipFile
字段没有发现任何差异,所以似乎threading
中有变化1}}模块 - 但在threading.py
中,版本之间也没有明显的变化。
为什么它不再可摘?在我可以挑选ZipFile之前,我是否需要做些什么?
编辑:好了,现在搜索了一会儿,我偶然发现了这个python bug跟踪器条目:https://bugs.python.org/msg284751
因此,ZipFile
可以在python中选择&lt; 3.6实际上是错误...
我想我现在需要改变很多代码......