Wenn Sie eine explizite Liste von Objekten mag, dass können gegen Objekte gebeizt werden, die nicht gebeizt werden können, sowohl mit pickle
als auch mit fortgeschritteneren Serialisierern wie dill
, diese Datei enthält eine etwas umfassende Liste für Standardbibliotheksobjekte. Es bietet eine einfache Möglichkeit, jedes Objekt (normalerweise ein Einzeiler) zu erstellen, und zeigt gegebenenfalls Varianten für verschiedene Versionen von Python an.
https://github.com/uqfoundation/dill/blob/cccbea9b715e16b742288e1e5a21a687a4d4081b/dill/_objects.py#L255
Zum Beispiel pickle
die folgende Aufgabe scheitern, während erweiterte Serializer wie dill
werden nicht:
>>> import dill
>>> dill.dumps(Ellipsis)
b'\x80\x03cdill.dill\n_eval_repr\nq\x00X\x08\x00\x00\x00Ellipsisq\x01\x85q\x02Rq\x03.'
Erweiterte Serializer auch auf Dateiobjekte und dergleichen arbeiten können, btw:
>>> dill.dumps(open('foo.pkl', 'w'))
b'\x80\x03cdill.dill\n_create_filehandle\nq\x00(X\x07\x00\x00\x00foo.pklq\x01X\x01\x00\x00\x00wq\x02K\x00\x89cdill.dill\n_get_attr\nq\x03cdill.dill\n_import_module\nq\x04X\x02\x00\x00\x00ioq\x05\x85q\x06Rq\x07X\x04\x00\x00\x00openq\x08\x86q\tRq\n\x89K\x00X\x00\x00\x00\x00q\x0btq\x0cRq\r.'
jedoch pickle
und dill
(Und andere fortgeschrittene Serializer) wird auf jede Art fehlschlagen, die direkt an eine Python gebunden ist FrameType
, wie ein Generator:
>>> dill.dumps((i for i in []))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mmckerns/lib/python3.4/site-packages/dill-0.2.6.dev0-py3.4.egg/dill/dill.py", line 243, in dumps
dump(obj, file, protocol, byref, fmode, recurse)#, strictio)
File "/Users/mmckerns/lib/python3.4/site-packages/dill-0.2.6.dev0-py3.4.egg/dill/dill.py", line 236, in dump
pik.dump(obj)
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/pickle.py", line 412, in dump
self.save(obj)
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/pickle.py", line 499, in save
rv = reduce(self.proto)
TypeError: can't pickle generator objects
Was baust du? Können wir einen Beispielcode für das fragliche Objekt haben? – GLaDOS