यदि आपको केवल एक ऑब्जेक्ट चाहिए जो परीक्षण के पिल्लों के लिए इसे चुनने पर एक अपवाद फेंक देगा, तो आप __getstate__
method को उड़ा सकते हैं।
>>> class C:
... def __getstate__(self):
... raise Exception
...
>>> pickle.dumps(C())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1374, in dumps
Pickler(file, protocol).dump(obj)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 224, in dump
self.save(obj)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 723, in save_inst
stuff = getstate()
File "<stdin>", line 3, in __getstate__
Exception
शायद उससे भी आसान हो जाता है!
आप एक कम कृत्रिम परिदृश्य चाहते हैं, वस्तुओं, आदि है कि फ़ाइल हैंडल, या सॉकेट, या धागे की तरह ओएस संसाधनों का उपयोग के बारे में सोचना
>>> with open('spam.txt', 'w') as f:
... pickle.dumps(f)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1374, in dumps
Pickler(file, protocol).dump(obj)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 224, in dump
self.save(obj)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 306, in save
rv = reduce(self.proto)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy_reg.py", line 70, in _reduce_ex
raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle file objects
आप क्या बना रहे हैं: (और अन्य उन्नत serializers) किसी भी प्रकार कि सीधे एक अजगर
FrameType
से जुड़ा हुआ है एक जनरेटर की तरह, पर असफल हो जायेगी? क्या हम वस्तु में नमूना कोड का सवाल उठा सकते हैं? – GLaDOS