2010-09-04 70 views
3

在我的django應用程序中,我使用會話變量創建了一個擴展的用戶配置文件。但是,當保存登記表和用戶正要創造,我有以下錯誤:使用會話時Python酸洗錯誤

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 

我GOOGLE了一個答案,但一無所獲有趣。任何解決方法?

+0

如果您可以發佈您的代碼,這將是有幫助的! – 2010-09-04 11:57:39

回答

4

看起來你的會話中有一個cStringIO對象(可能是一個上傳的文件?),它們不能被醃製。要麼編寫自定義酸洗代碼,要麼確保所有的會話數據都可以被序列化。

+0

是的,我正在上傳一個文件。 – 2010-09-04 12:27:37

1

一些奇怪的事情在這裏,因爲錯誤是指cStringIO.StringO,而類實際上是cStringIO.StringIO,有一個額外的一,你有地方拼錯了名字?

1

在支持伊沃的回答,這裏是一個參考,我發現這也許可以解釋這一點:http://bugs.python.org/issue5345

這不是一個錯字。 cStringIO.StringIO 是一個工廠函數,它返回 或cStringO對象(用於寫入) 或cStringI(用於讀取)。如果這種行爲導致您的問題,則 考慮使用StringIO.StringIO。

或者,你可以升級到 的Python 2.7或3.0,並使用 io.StringIO(),它不具有此 限制。