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

Fariba Laiq 15 Februar 2024
  1. Beizen und Unpickling in Python
  2. Ursache des ValueError: unsupported pickle protocol: 3 in Python
  3. Korrigieren Sie den ValueError: unsupported pickle protocol: 3 in Python
ValueError: Nicht unterstütztes Pickle-Protokoll: 3 in Python

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.

Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

Verwandter Artikel - Python Error