我有一个视图,它只检查会话存储区中的一个密钥,如果它存在,它将删除它,如果它不存在,它应该通过,可能值得注意的是,密钥存储区保存着模型实例的id。

def RefreshInstances(request):

    if request.session['instances']:
      del request.session['instances']
    else:
      pass

    return redirect('/')


有人能发光吗?
提前谢谢。

最佳答案

访问不存在的DICT(或DISTICAL)的密钥会引发KeyError
您可以显式检查密钥:

if 'instances' in request.session:
   # ...

或者可以使用.get()方法,如果密钥不存在,则返回默认值(None默认值),这也很方便,因为诸如0、''、false、[]等的冒牌值通过测试:
if request.session.get('instances'):
      del request.session['instances']

... but for deletion, simply use .pop() with a default and without an if:
request.session.pop('instances', None)  # Remove `instances` if it's there, do nothing otherwise.

关于python - 为什么我的if语句产生关键错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56889622/

10-12 20:00