ValueError: непідтримуваний протокол соління: 3, пікетон python2 не може завантажити файл, скинутий на python 3 pickle?


101

Я використовую соління, щоб скинути файл на python 3, і я використовую pickle для завантаження файлу на python 2, з'являється ValueError.

Отже, піктограма python 2 не може завантажити файл, скинутий на python 3 pickle?

Якщо я хочу цього? Як зробити?


5
Якщо ви застрягли з уже написаними маринованими файлами, а потім перевірити: stackoverflow.com/questions/34571063 / ...
rysqui

Відповіді:


158

Вам слід записати мариновані дані з меншим номером протоколу в Python 3. Python 3 представив новий протокол з номером 3(і використовує його як за замовчуванням), тож переключиться на значення, 2яке може бути прочитане Python 2.

Перевірте protocolпараметр в pickle.dump. Ваш отриманий код буде виглядати приблизно так.

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

Немає protocolпараметра в, pickle.loadтому що pickleможе визначити протокол з файлу.


54

Pickle використовує різні protocolsдля перетворення ваших даних у бінарний потік.

Ви повинні вказати в python 3 протокол нижче, ніж 3щоб можна було завантажувати дані в python 2. Ви можете вказати protocolпараметр під час виклику pickle.dump.


10
Тільки для подальшої довідки, мабуть, є протокол, 5який був введений в Python 3.8, а також не сумісний з більш ранніми версіями.
Farzad Abdolhosseini

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.