首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KeyError这说明密钥(合作伙伴)不在字典中?

KeyError这说明密钥(合作伙伴)不在字典中?
EN

Stack Overflow用户
提问于 2010-05-25 17:12:45
回答 2查看 733关注 0票数 4

我正在尝试使用python和django制作一个聊天应用程序。我几乎完成了它,它工作8-10分钟,当两个人聊天超过一定的时间后,它显示一个错误。

这是回溯:

代码语言:javascript
复制
Traceback (most recent call last):

  File "\Django_chat\django_chat\chat\views.py", line 55, in receive

    message = chatSession.getMessage(request.session['partner'],request.session['uid'],afterTime)

  File "C:\Python26\lib\site-packages\django\contrib\sessions\backends\base.py", line 47, in __getitem__

    return self._session[key]

KeyError: 'partner'

这是接收模块:

代码语言:javascript
复制
def receive(request):
    # message received by this user
    chatSession = chat()
    data = request.POST
    afterTime = data['lastMsgTime']
    try:
        message = chatSession.getMessage(
            request.session['partner'],
            request.session['uid'],
            afterTime)
    except:
        #partnerId = virtual_users.objects.get(id=request.session['uid']).partner
        print('there is an error in receive request')
        traceback.print_exc(file=open("/myapp.log","a"))
    msg = serializers.serialize("json", message)
    return HttpResponse(msg)

请帮帮我:(谢谢Ansh J

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-25 17:37:54

我假设用户的会话超时了,因此request.session中没有partneruid值。

根据会话上的(缺少)活动,会话会超时。出于过期目的,读取会话不被视为活动。Session expiration是从上次修改会话时计算得出的。默认情况下,Django仅在会话被修改时保存到会话数据库中--也就是说,如果分配或删除了它的任何字典值。要更改此默认行为,请将SESSION_SAVE_EVERY_REQUEST设置为True。如果SESSION_SAVE_EVERY_REQUEST为True,Django将在每次请求时将会话保存到数据库。

票数 3
EN

Stack Overflow用户

发布于 2010-05-25 17:26:34

试一试

print 'request.session contains ', repr(request.session)

在你的except套间里。除了以'partner'为关键字的条目之外,字典是否还缺少其他内容?它是空的吗?无论如何,试着弄清楚它是如何/为什么会变成这样的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2903329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档