2010-09-04 3 views
3

Dans mon application django, je créais un profil utilisateur étendu à l'aide de vars de session. Mais lorsque le formulaire d'inscription a été enregistrée et l'utilisateur était sur le point de créer, je suis erreur suivant:Erreur de décapage Python lors de l'utilisation de sessions

Traceback (most recent call last): 

    File "\Python26\Lib\site-packages\django\core\servers\basehttp.py", line 279, in run 
    self.result = application(self.environ, self.start_response) 

    File "\Python26\Lib\site-packages\django\core\servers\basehttp.py", line 651, in __call__ 
    return self.application(environ, start_response) 

    File "\Python26\Lib\site-packages\django\core\handlers\wsgi.py", line 245, in __call__ 
    response = middleware_method(request, response) 

    File "\Python26\Lib\site-packages\django\contrib\sessions\middleware.py", line 36, in process_response 
    request.session.save() 

    File "\Python26\Lib\site-packages\django\contrib\sessions\backends\db.py", line 53, in save 
    session_data = self.encode(self._get_session(no_load=must_create)), 

    File "\Python26\Lib\site-packages\django\contrib\sessions\backends\base.py", line 88, in encode 
    pickled = pickle.dumps(session_dict, pickle.HIGHEST_PROTOCOL) 

PicklingError: Can't pickle <type 'cStringIO.StringO'>: attribute lookup cStringIO.StringO failed 

J'ai googlé une réponse, mais rien trouvé intéressant. Des solutions de contournement pour cela?

+0

Il serait utile que vous puissiez également poster votre code! –

Répondre

4

Il semble que vous ayez un objet cStringIO dans votre session (peut-être un fichier téléchargé?), Ils ne peuvent pas être décapés. Écrivez du code de décapage personnalisé ou assurez-vous que toutes vos données de session peuvent être sérialisées.

+0

oui, je télécharge un fichier. –

1

Quelque chose d'étrange se passe ici, parce que l'erreur se réfère à cStringIO.StringO alors que la classe est en réalité cStringIO.StringIO, avec un supplément I. Avez-vous mal orthographié le nom quelque part?

1

À l'appui de la réponse de Ivo, voici une référence que je trouve ce qui peut expliquer ceci: http://bugs.python.org/issue5345

Ce n'est pas une faute de frappe. cStringIO.StringIO est une fonction d'usine qui renvoie soit un objet cStringO (pour l'écriture) ou cStringI (pour la lecture). Si ce comportement vous cause un problème, alors envisagez d'utiliser StringIO.StringIO.

Sinon, vous pouvez passer à Python 2.7 ou 3.0 et utiliser io.StringIO() qui ne possède pas cette limitation .

Questions connexes