ValueError: nieobsługiwany protokół pickle: 3, python2 pickle nie może załadować pliku zrzuconego przez python 3 pickle?


Odpowiedzi:


158

Marynowane dane należy zapisać z niższym numerem protokołu w Pythonie 3. Python 3 wprowadził nowy protokół z numerem 3(i używa go jako domyślnego), więc przełącz się z powrotem na wartość, 2którą może odczytać Python 2.

Sprawdź protocolparametr w pickle.dump. Twój wynikowy kod będzie wyglądał następująco.

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

Nie ma protocolparametru, pickle.loadponieważ picklemożna określić protokół z pliku.


54

Pickle używa różnych protocolsdo konwersji danych do strumienia binarnego.

Musisz określić w Pythonie 3 protokół niższy niż 3, aby móc załadować dane w Pythonie 2. Możesz określić protocolparametr podczas wywoływania pickle.dump.


10
Tylko dla przyszłego odniesienia, najwyraźniej istnieje protokół, 5który został również wprowadzony w Pythonie 3.8, który nie jest kompatybilny z wcześniejszymi wersjami.
Farzad Abdolhosseini

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.