ValueError: неподдерживаемый протокол pickle: 3, python2 pickle не может загрузить файл, сбрасываемый python 3 pickle?
Я использую pickle для дампа файла на python 3, и я использую pickle для загрузки файла на python 2, появляется ValueError.
Итак, python 2 pickle не может загрузить файл, сбрасываемый python 3 pickle?
Если я хочу? Как это сделать?
Ответ 1
Вы должны написать маринованные данные с более низким номером протокола в Python 3. Python 3 представил новый протокол с номером 3 (и использует его по умолчанию), поэтому вернитесь к значению 2, которое может читать Python 2.
Проверьте параметр protocol в pickle.dump. Полученный вами код будет выглядеть следующим образом.
pickle.dump(your_object, your_file, protocol=2)
В pickle.load нет параметра protocol, потому что pickle может определить протокол из файла.
Ответ 2
Pickle использует разные protocols для преобразования ваших данных в двоичный поток.
В python 2 есть 3 разных протокола (0, 1, 2), а по умолчанию используется 0.
Вы должны указать в python 3 протокол ниже 3, чтобы иметь возможность загружать данные в python 2. Вы можете указать параметр protocol при вызове pickle.dump.