TypeError:'DoesNotExist'对象不可调用

时间:2011-10-24 14:39:12

标签: python django

这并不总是这个代码块,但这是最新的。它似乎是随机的,有什么想法吗?

try:
    u = User.objects.get(email__iexact=useremail)
except User.DoesNotExist:
    ...

随机抛出此错误。

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

1 个答案:

答案 0 :(得分:43)

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

你可能有类似的东西:

try:
    do_something()
except User.MultipleObjectsReturned, User.DoesNotExist:
    pass

而不是:

try:
    do_something()
except (User.MultipleObjectsReturned, User.DoesNotExist):
    pass

如果没有括号,则except语句与Python 2.6+

中的以下内容等效
except User.MultipleObjectsReturned as User.DoesNotExist:

User.MultipleObjectsReturned例外的实例会覆盖User.DoesNotExist

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