ValueError: protocolo pickle não suportado: 3, pickle python2 não pode carregar o arquivo despejado por pickle python 3?


Respostas:


158

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 valor 2que possa ser lido pelo Python 2.

Verifique o protocolparâmetro em pickle.dump. Seu código resultante será semelhante a este.

pickle.dump(your_object, your_file, protocol=2)

Não há protocolparâmetro em pickle.loadporque picklepode determinar o protocolo do arquivo.


54

Pickle usa diferentes protocolspara converter seus dados em um fluxo binário.

Você deve especificar em python 3 um protocolo inferior a 3para poder carregar os dados em python 2. Você pode especificar o protocolparâmetro ao invocar pickle.dump.


10
Apenas para referência futura, aparentemente há um protocolo 5que foi introduzido no Python 3.8 também que não é compatível com as versões anteriores.
Farzad Abdolhosseini

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.