ValueError: असमर्थित अचार प्रोटोकॉल: 3, python2 अचार अजगर 3 अचार द्वारा डंप की गई फ़ाइल को लोड नहीं कर सकता है?


101

मैं अजगर 3 पर फ़ाइल डंप करने के लिए अचार का उपयोग करता हूं, और मैं अजगर 2 पर फ़ाइल को लोड करने के लिए अचार का उपयोग करता हूं, ValueError प्रकट होता है।

तो, अजगर 2 अचार अजगर 3 अचार द्वारा डंप की गई फ़ाइल को लोड नहीं कर सकता है?

अगर मैं चाहूं तो? कैसे करें?


5
यदि आप पहले से लिखी गई फाइलों के साथ अटके हैं, तो देखें: stackoverflow.com/questions/34571063/…
rysqui

जवाबों:


158

आपको पायथॉन में कम प्रोटोकॉल नंबर के साथ पिकेड डेटा लिखना चाहिए। पायथन 3 ने नंबर के साथ एक नया प्रोटोकॉल पेश किया 3(और इसे डिफ़ॉल्ट के रूप में उपयोग करता है), इसलिए एक मूल्य पर वापस स्विच करें 2जिसे पायथन 2 द्वारा पढ़ा जा सकता है।

में protocolपैरामीटर की जाँच करें pickle.dump। आपका परिणामी कोड इस तरह दिखेगा।

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

इसमें कोई protocolपैरामीटर नहीं है pickle.loadक्योंकि pickleफ़ाइल से प्रोटोकॉल निर्धारित किया जा सकता है।


55

अचार protocolsआपके डेटा को बाइनरी स्ट्रीम में बदलने के लिए अलग-अलग उपयोग करता है।

आप अजगर 3 3में डेटा लोड करने में सक्षम होने की तुलना में अजगर 3 में एक प्रोटोकॉल को कम निर्दिष्ट करना चाहिए । आप protocolजब आह्वान कर रहे हैं तो पैरामीटर निर्दिष्ट कर सकते हैं pickle.dump


11
बस भविष्य के संदर्भ के लिए, जाहिर तौर पर एक प्रोटोकॉल है 5जिसे पायथन 3.8 में पेश किया गया था जो पहले के संस्करणों के साथ संगत नहीं है।
फ़रज़ाद अब्दोल्होसिनी

पुन: प्रोटोकॉल 5 python.org/dev/peps/pep-0574
कालेब सिरिंज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.