Python Django会话字典键尝试替换时出错

Python Django会话字典键尝试替换时出错,python,django,session,dictionary,keyerror,Python,Django,Session,Dictionary,Keyerror,我正在处理后端的第三方授权问题,并遇到奇怪的会话存储行为 当我检测到第三方会话授权已无效时,我将重新进行身份验证,并尝试更新会话中的数据,但这不起作用 问题是,在我从会话中删除密钥后,当我获得更新信息后尝试替换密钥时,会出现一个密钥错误 def my_session_thing(invalidate=False): if invalidate: del self.request.session['my_session_dict'] self.request

我正在处理后端的第三方授权问题,并遇到奇怪的会话存储行为

当我检测到第三方会话授权已无效时,我将重新进行身份验证,并尝试更新会话中的数据,但这不起作用

问题是,在我从会话中删除密钥后,当我获得更新信息后尝试替换密钥时,会出现一个密钥错误

def my_session_thing(invalidate=False):
    if invalidate:
        del self.request.session['my_session_dict']
        self.request.session.modified = True

    my_session_dict = self.request.session.get('my_session_dict')
    if my_session_dict is not None:
        self.current_session_dict = my_session_dict
        return

    my_new_session_dict = {
        'foo': 'bar'
    }

    # ** Why does this raise a KeyError when invalidate is True? **
    self.request.session['my_session_dict'] = my_new_session_dict

我目前正在探索这种策略的替代方案,但我发现这种行为与How to use sessions文档中描述的类似词典的行为相矛盾,因此值得发布。

有趣。快速测试显示del item行出现了一个关键错误,而不是您所说的发生错误的地方。 显然,您必须先检查密钥是否存在,然后才能删除它:

def my_session_thing(invalidate=False):
    if invalidate and 'my_session_dict' in self.request.session:

至于为什么这在不应该的时候是必要的,我说不出我闻到了房地产骗局的味道。调用uu del_uu或pop时,会话似乎没有加载其存储。

请共享密钥错误消息。。。不清楚错误发生在哪里