ValueError: protokol acar tidak didukung: 3, acar python2 tidak dapat memuat file yang dibuang oleh acar python 3?


101

Saya menggunakan acar untuk membuang file di python 3, dan saya menggunakan acar untuk memuat file di python 2, ValueError muncul.

Jadi, acar python 2 tidak dapat memuat file yang dibuang oleh acar python 3?

Jika saya menginginkannya? Bagaimana melakukan?


5
Jika Anda terjebak dengan file acar yang sudah ditulis, periksa: stackoverflow.com/questions/34571063/…
rysqui

Jawaban:


158

Anda harus menulis data acar dengan nomor protokol yang lebih rendah di Python 3. Python 3 memperkenalkan protokol baru dengan nomor tersebut 3(dan menggunakannya sebagai default), jadi beralih kembali ke nilai2 yang dapat dibaca oleh Python 2.

Periksa protocolparameter di pickle.dump. Kode yang Anda hasilkan akan terlihat seperti ini.

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

Tidak ada protocolparameter masuk pickle.loadkarena pickledapat menentukan protokol dari file.


54

Pickle menggunakan perbedaan protocolsuntuk mengubah data Anda menjadi aliran biner.

Anda harus menentukan dalam python 3 protokol yang lebih rendah dari 3untuk dapat memuat data di python 2. Anda dapat menentukan protocolparameter saat memanggil pickle.dump.


10
Hanya untuk referensi di masa mendatang, ternyata ada protokol 5yang juga diperkenalkan dengan Python 3.8 yang tidak kompatibel dengan versi sebelumnya.
Farzad Abdolhosseini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.