Eu uso pickle para despejar um arquivo no python 3 e uso pickle para carregar o arquivo no python 2, o ValueError aparece.
Então, python 2 pickle não pode carregar o arquivo despejado por python 3 pickle?
Se eu quiser? Como fazer?
python
python-3.x
python-2.7
pickle
valueerror
Aleeee
fonte
fonte
Respostas:
Você deve escrever os dados em conserva com um número de protocolo inferior no Python 3. O Python 3 introduziu um novo protocolo com o número
3
(e o usa como padrão), então volte para um valor2
que possa ser lido pelo Python 2.Verifique o
protocol
parâmetro empickle.dump
. Seu código resultante será semelhante a este.Não há
protocol
parâmetro empickle.load
porquepickle
pode determinar o protocolo do arquivo.fonte
Pickle usa diferentes
protocols
para converter seus dados em um fluxo binário.Em pitão 2 existem 3 diferentes protocolos (
0
,1
,2
) e o padrão é0
.Em pitão 3 existem 5 protocolos diferentes (
0
,1
,2
,3
,4
) e o padrão é3
.Você deve especificar em python 3 um protocolo inferior a
3
para poder carregar os dados em python 2. Você pode especificar oprotocol
parâmetro ao invocarpickle.dump
.fonte
5
que foi introduzido no Python 3.8 também que não é compatível com as versões anteriores.