Подтвердить что ты не робот

TypeError: объект DoNotExist не может быть вызван

Это не всегда этот фрагмент кода, но это самый последний. Кажется, это случайные, любые мысли?

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
4b9b3361

Ответ 1

Как говорит Крис в комментариях выше, ваш фрагмент действителен. Где-то еще в вашем коде вы можете ошибиться неправильно.

У вас может быть что-то вроде:

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.