I use pickle to dump a file on python 3, and I use pickle to load the file on python 2, the ValueError appears.
So, python 2 pickle can not load the file dumped by python 3 pickle?
If I want it? How to do?
I use pickle to dump a file on python 3, and I use pickle to load the file on python 2, the ValueError appears.
So, python 2 pickle can not load the file dumped by python 3 pickle?
If I want it? How to do?
Pickle uses different
protocols
to convert your data to a binary stream.In python 2 there are 3 different protocols (
0
,1
,2
) and the default is0
.In python 3 there are 5 different protocols (
0
,1
,2
,3
,4
) and the default is3
.You must specify in python 3 a protocol lower than
3
in order to be able to load the data in python 2. You can specify theprotocol
parameter when invokingpickle.dump
.You should write the pickled data with a lower protocol number in Python 3. Python 3 introduced a new protocol with the number
3
(and uses it as default), so switch back to a value of2
which can be read by Python 2.Check the
protocol
parameter inpickle.dump
. Your resulting code will look like this.There is no
protocol
parameter inpickle.load
becausepickle
can determine the protocol from the file.