ValueError: Nicht unterstütztes Pickle-Protokoll: 3, Python2 Pickle kann die von Python 3 Pickle ausgegebene Datei nicht laden?

101

Ich verwende pickle, um eine Datei auf Python 3 zu sichern, und ich verwende pickle, um die Datei auf Python 2 zu laden. Der ValueError wird angezeigt.

Also, Python 2 Pickle kann die von Python 3 Pickle abgelegte Datei nicht laden?

Wenn ich es will Wie macht man?

Aleeee
quelle
5
Wenn Sie mit bereits geschriebenen eingelegten Dateien nicht weiterkommen,
lesen

Antworten:

158

Sie sollten die eingelegten Daten mit einer niedrigeren Protokollnummer in Python 3 schreiben. Python 3 hat ein neues Protokoll mit der Nummer eingeführt 3(und verwendet es standardmäßig). Wechseln Sie also zurück zu einem Wert, der 2von Python 2 gelesen werden kann.

Überprüfen Sie den protocolParameter in pickle.dump. Ihr resultierender Code sieht folgendermaßen aus.

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

Es gibt keinen protocolParameter in, pickle.loadda pickledas Protokoll aus der Datei ermittelt werden kann.

Matthias
quelle
54

Pickle verwendet different protocols, um Ihre Daten in einen Binärstrom umzuwandeln.

Sie müssen in Python 3 ein Protokoll angeben, das niedriger ist als 3, um die Daten in Python 2 laden zu können. Sie können den protocolParameter beim Aufrufen angeben pickle.dump.

enrico.bacis
quelle
10
Nur zum späteren Nachschlagen gibt es anscheinend ein Protokoll 5, das auch in Python 3.8 eingeführt wurde und nicht mit früheren Versionen kompatibel ist.
Farzad Abdolhosseini
Betreff
Caleb Syring