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?
python
python-3.x
python-2.7
pickle
valueerror
Aleeee
sumber
sumber
Jawaban:
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
protocol
parameter dipickle.dump
. Kode yang Anda hasilkan akan terlihat seperti ini.Tidak ada
protocol
parameter masukpickle.load
karenapickle
dapat menentukan protokol dari file.sumber
Pickle menggunakan perbedaan
protocols
untuk mengubah data Anda menjadi aliran biner.Dalam python 2 ada 3 protokol yang berbeda (
0
,1
,2
) dan default adalah0
.Dalam python 3 ada 5 protokol yang berbeda (
0
,1
,2
,3
,4
) dan default adalah3
.Anda harus menentukan dalam python 3 protokol yang lebih rendah dari
3
untuk dapat memuat data di python 2. Anda dapat menentukanprotocol
parameter saat memanggilpickle.dump
.sumber
5
yang juga diperkenalkan dengan Python 3.8 yang tidak kompatibel dengan versi sebelumnya.