我正在为我的api使用rest框架的令牌认证。最近我发现了一个问题,如果请求中提供的令牌无效,而不是返回Invalid Token
响应,则django会抛出TypeError at /api/users/: 'exceptions.KeyError' object is not callable
。
我检查了跟踪,发现了这个:
在django / db / models / query.py(Django version = 1.7)文件行号357,内部引发DoesNotExists
异常调用中,由TypeError
引发的实际异常self.model._meta.object_name
。
if num == 1:
return clone._result_cache[0]
if not num:
raise self.model.DoesNotExist(
"%s matching query does not exist." %
self.model._meta.object_name)
有人知道为什么模型的object_name变成exception.KeyError
而不是Token
吗?
答案 0 :(得分:0)
奇怪的是,当我的代码中有这一行时,我得到了这个:
except KeyError, models.MyModel.DoesNotExist:
其中逗号被解释为" as",重新定义models.MyModel.DoesNotExist为KeyError并导致" exception.KeyError不可调用"在创建一个时。
我打算做的是:
except (KeyError, models.MyModel.DoesNotExist):