ValueError: неподдерживаемый протокол рассола: 3, рассол python2 не может загрузить файл, сброшенный рассолом python 3?


101

Я использую pickle для дампа файла на python 3 и использую pickle для загрузки файла на python 2, появляется ValueError.

Итак, python 2 pickle не может загрузить файл, сброшенный python 3 pickle?

Если я этого хочу? Как сделать?


5
Если вы застряли с уже написанными маринованными файлами, посмотрите: stackoverflow.com/questions/34571063/…
rysqui 03

Ответы:


158

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

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

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

protocolПараметр отсутствует, pickle.loadпотому pickleчто протокол можно определить по файлу.


55

Pickle использует другое protocolsдля преобразования ваших данных в двоичный поток.

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


11
Просто для справки в будущем, очевидно, есть протокол, 5который также был введен в Python 3.8, который несовместим с более ранними версиями.
Фарзад Абдольхоссейни,

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.