"sono molto più probabili di un bug mai osservato in Python stesso in una funzionalità che viene utilizzata miliardi di volte al giorno in tutto il mondo": mi stupisce sempre il modo in cui le persone si intromettono in questi forum.
Un modo semplice per ottenere questo problema è dimenticare di chiudere il flusso che si sta utilizzando per scaricare la struttura dei dati. Ho appena fatto
>>> out = open('xxx.dmp', 'w')
>>> cPickle.dump(d, out)
>>> k = cPickle.load(open('xxx.dmp', 'r'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: insecure string pickle
Ed è per questo che sono venuto qui, in primo luogo, perché non riuscivo a vedere quello che avevo fatto di sbagliato.
E poi ho effettivamente pensato, piuttosto che venire qui, e ho capito che avrei dovuto fare:
>>> out = open('xxx.dmp', 'w')
>>> cPickle.dump(d, out)
>>> out.close() # close it to make sure it's all been written
>>> k = cPickle.load(open('xxx.dmp', 'r'))
facile da dimenticare. Non c'era bisogno che alla gente venisse detto che sono degli idioti.
fonte
2012-11-15 10:25:42
Se posso cPickle.dump quell'oggetto, perché non posso cPickle.load quell'oggetto? Non è strano? Python fa cose stupide alcune volte. –
Ho ottenuto questo quando ho memorizzato i dati in pickled nel database nell'applicazione django. Poi ho modificato manualmente la stringa tramite l'interfaccia di amministrazione e l'ho rotta. (Penso che django abbia lasciato caratteri '\ n') – SummerBreeze
@ SummerBreeze: come hai risolto il problema. Sto affrontando lo stesso problema durante la modifica con django-admin. Grazie in anticipo . –