TypeError:'DoesNotExist'对象不可调用

Rya*_*zel 18 python django

它并不总是这个代码块,但这是最新的.它似乎是随机的,任何想法?

try:
    u = User.objects.get(email__iexact=useremail)
except User.DoesNotExist:
    ...
Run Code Online (Sandbox Code Playgroud)

随机引发此错误.

File "/srv/myapp/registration/models.py", line 23, in get_or_create_user
  u = User.objects.get(email__iexact=useremail)

File "/usr/local/lib/python2.6/dist-packages/django/db/models/manager.py", line 132, in get
  return self.get_query_set().get(*args, **kwargs)

File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 349, in get
  % self.model._meta.object_name)

TypeError: ‘DoesNotExist’ object is not callable
Run Code Online (Sandbox Code Playgroud)

Ala*_*air 43

正如克里斯在上面的评论中所说,你的代码片段是有效的.在代码中的其他位置,您可能会错误地捕获异常.

你可能有类似的东西:

try:
    do_something()
except User.MultipleObjectsReturned, User.DoesNotExist:
    pass
Run Code Online (Sandbox Code Playgroud)

代替:

try:
    do_something()
except (User.MultipleObjectsReturned, User.DoesNotExist):
    pass
Run Code Online (Sandbox Code Playgroud)

没有括号,except语句等同于Python 2.6+中的以下内容

except User.MultipleObjectsReturned as User.DoesNotExist:
Run Code Online (Sandbox Code Playgroud)

User.MultipleObjectsReturned异常的实例会覆盖User.DoesNotExist.

当同一进程稍后处理不同的请求时,您会得到,TypeError因为您的代码正在尝试调用已替换的异常实例User.DoesNotExist.

  • 真棒!谢谢,所有DoesNotExists的快速grep显示了罪魁祸首.除了LoginKey.DoesNotExist,User.DoesNotExist: (2认同)