Se si desidera un elenco esplicito di oggetti che può essere messo in salamoia contro oggetti che non possono essere decapitati, sia usando pickle
, che con serializzatori più avanzati come dill
, questo file contiene un elenco piuttosto completo per oggetti di libreria standard. Fornisce un modo semplice per costruire ogni oggetto (in genere, un unico elemento) e mostra varianti per diverse versioni di python, se applicabile.
https://github.com/uqfoundation/dill/blob/cccbea9b715e16b742288e1e5a21a687a4d4081b/dill/_objects.py#L255
Per esempio, pickle
fallirà il seguente oggetto, mentre serializzatori avanzati come dill
non:
>>> import dill
>>> dill.dumps(Ellipsis)
b'\x80\x03cdill.dill\n_eval_repr\nq\x00X\x08\x00\x00\x00Ellipsisq\x01\x85q\x02Rq\x03.'
serializzatori avanzati possono lavorare anche su oggetti di file e simili, 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.'
Tuttavia, pickle
e dill
(E di altri serializzatori avanzate) avrà esito negativo su qualsiasi tipo che è direttamente legato ad un pitone FrameType
, come un generatore:
>>> 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
Cosa stai costruendo? possiamo avere un codice di esempio dell'oggetto in questione? – GLaDOS