HOWTO · Python

ValueError: Nicht unterstütztes Pickle-Protokoll: 3 in Python

Dieses Tutorial demonstriert ValueError: unsupported pickle protocol: 3, seine Ursache und die Möglichkeit, diesen Fehler in Python zu beheben.

Auf dieser Seite

Jede Programmiersprache trifft auf viele Fehler. Einige treten zur Kompilierzeit auf, andere zur Laufzeit.

Dieser Artikel behandelt den ValueError: unsupported pickle protocol: 3.

Beizen und Unpickling in Python

Pickling ist eine Methode, um ein Python-Objekt (list, dict, etc.) in einen Zeichenstrom umzuwandeln. Dieser Zeichenstrom soll alle Daten enthalten, die erforderlich sind, um das Objekt in einem anderen Python-Skript mit einem umgekehrten Prozess namens Unpickling neu zu erstellen.

Das pickle-Modul erledigt das Beizen und Entpicken in Python.

Im folgenden Code haben wir eine Liste gepickt und unpicked. Wir haben eine Namensliste erstellt und die Datei im wb-Modus geöffnet.

Das w erstellt eine Datei, falls sie noch nicht vorhanden ist, und das b schreibt die Daten(liste) in einem Bytestrom in die Datei. Wir haben die Methode dump() aufgerufen, die die zu dumpende Liste und den Dateinamen angibt, in den die Daten in Form von Bytes geschrieben werden sollen.

In ähnlicher Weise haben wir die Daten entpickt, indem wir sie zuerst im rb-Modus aus der Datei gelesen haben. Mit der Methode load() lesen wir die Bytes aus der Datei und wandeln sie zurück in das Listenobjekt.

Beispielcode:

# Python 3.x
import pickle

my_list = ["Jhon", "Alia", "Sam", "Chris"]
with open("my_file.txt", "wb") as f:
    pickle.dump(my_list, f)
my_file = open("my_file.txt", "rb")
data = pickle.load(my_file)
print(data)

Ausgabe (auf Anacondas Jupyter Notebook ausführen):

Gurke auf Python 3

Ursache des ValueError: unsupported pickle protocol: 3 in Python

Manchmal sehen wir uns beim Entpicken mit dem ValueError: unsupported pickle protocol: 3 konfrontiert. Dies liegt an den inkompatiblen Beizprotokollen, die beim Beizen und Entpicken der Daten verwendet werden.

Python 3 hat standardmäßig Protokoll 3 eingeführt und verwendet, um die Daten zu picken und zu entfernen, wenn wir das Protokoll nicht angeben. Wenn wir die Daten mit unterschiedlichen Protokollen picken und unpicken, tritt dieser Fehler auf, wie im folgenden Code gezeigt.

Python 2 verwendete standardmäßig Protokoll 0 und Python 3 verwendete Protokoll 3. Dieser Fehler tritt also meistens auf, wenn wir die Daten in verschiedenen Python-Versionen picken und unpicken, ohne die Protokollversion korrekt anzugeben.

Beispielcode:

Python3:

# Python 3.x
import pickle

my_list = ["Jhon", "Alia", "Sam", "Chris"]
with open("my_file.txt", "wb") as f:
    pickle.dump(my_list, f)

Python 2:

# Python 2.x
import pickle

my_file = open("my_file.txt", "rb")
data = pickle.load(my_file)
print(data)

Ausgang:

nicht unterstützter Pickle-Protokollfehler

Korrigieren Sie den ValueError: unsupported pickle protocol: 3 in Python

Um diesen Fehler zu beheben, müssen wir das Pickle-Protokoll kleiner als 3 angeben, wenn wir die Daten mit Python 3 sichern, um diese Daten in Python 2 zu laden. Da Python 2 keine Protokolle größer als 2 unterstützt.

Beispielcode:

# Python 3.x
import pickle

my_list = ["Jhon", "Alia", "Sam", "Chris"]
with open("my_file.txt", "wb") as f:
    pickle.dump(my_list, f, protocol=2)

Beispielcode:

# Python 2.x
import pickle

my_file = open("my_file.txt", "rb")
data = pickle.load(my_file)
print(data)

Ausgang:

Nicht unterstütztes Pickle-Protokoll behoben

Hier steht u vor Strings für Unicode.