ValueError: protocolo pickle no compatible: 3, ¿el pickle python2 no puede cargar el archivo descargado por el pickle python 3?

Respuestas:

158

Debes escribir los datos en escabeche con un número de protocolo más bajo en Python 3. Python 3 introdujo un nuevo protocolo con el número 3(y lo usa como predeterminado), así que vuelve a un valor 2que Python 2 pueda leer.

Verifique el protocolparámetro en pickle.dump. Su código resultante se verá así.

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

No hay ningún protocolparámetro en pickle.loadporque picklepuede determinar el protocolo del archivo.

Matías
fuente
54

Pickle utiliza diferentes protocolspara convertir sus datos en un flujo binario.

Debe especificar en python 3 un protocolo más bajo que 3para poder cargar los datos en python 2. Puede especificar el protocolparámetro al invocar pickle.dump.

enrico.bacis
fuente
10
Solo para referencia futura, aparentemente hay un protocolo 5que también se introdujo en Python 3.8 que no es compatible con versiones anteriores.
Farzad Abdolhosseini
re: protocolo 5 python.org/dev/peps/pep-0574
Caleb Syring