ValueError: giao thức dưa chua không được hỗ trợ: 3, dưa chua python2 không thể tải tệp do python 3 dưa chua?


101

Tôi sử dụng pickle để kết xuất tệp trên python 3 và tôi sử dụng pickle để tải tệp trên python 2, ValueError xuất hiện.

Vì vậy, python 2 dưa chua không thể tải tệp do python 3 dưa chua?

Nếu tôi muốn nó? Làm như thế nào?


5
Nếu bạn đang bị mắc kẹt với các file ngâm đã viết, sau đó kiểm tra: stackoverflow.com/questions/34571063/...
rysqui

Câu trả lời:


158

Bạn nên viết dữ liệu đã chọn với số giao thức thấp hơn bằng Python 3. Python 3 đã giới thiệu một giao thức mới với số 3(và sử dụng nó làm mặc định), vì vậy hãy chuyển về một giá trị 2mà Python 2 có thể đọc được.

Kiểm tra protocolthông số trong pickle.dump. Mã kết quả của bạn sẽ giống như thế này.

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

Không có protocoltham số trong pickle.loadpicklecó thể xác định giao thức từ tệp.


54

Pickle sử dụng khác nhau protocolsđể chuyển đổi dữ liệu của bạn thành một luồng nhị phân.

Bạn phải chỉ định trong python 3 một giao thức thấp hơn 3để có thể tải dữ liệu trong python 2. Bạn có thể chỉ định protocoltham số khi gọi pickle.dump.


10
Chỉ để tham khảo trong tương lai, dường như có một giao thức 5đã được giới thiệu trong Python 3.8 cũng không tương thích với các phiên bản trước đó.
Farzad Abdolhosseini

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.