ValueError: protocollo pickle non supportato: 3, python2 pickle non può caricare il file scaricato da python 3 pickle?


Risposte:


158

Dovresti scrivere i dati in salamoia con un numero di protocollo inferiore in Python 3. Python 3 ha introdotto un nuovo protocollo con il numero 3(e lo usa come predefinito), quindi torna a un valore 2che può essere letto da Python 2.

Controllare il protocolparametro in pickle.dump. Il codice risultante sarà simile a questo.

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

Non è presente alcun protocolparametro pickle.loadperché picklepuò determinare il protocollo dal file.


54

Pickle usa diversi protocolsper convertire i tuoi dati in un flusso binario.

È necessario specificare in python 3 un protocollo inferiore 3a per poter caricare i dati in python 2. È possibile specificare il protocolparametro durante la chiamata pickle.dump.


10
Solo per riferimento futuro, a quanto pare c'è un protocollo 5che è stato introdotto anche in Python 3.8 che non è compatibile con le versioni precedenti.
Farzad Abdolhosseini il

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.