2011-10-24 11 views
18

항상이 코드 청크가 아니지만 가장 최근의 것입니다. 어떤 생각이라도 무작위로 보인다.TypeError : 'DoesNotExist'객체를 호출 할 수 없습니다.

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 
+0

어딘가에 나쁜 임무를 수행하고있는 것 같습니다. –

+0

실제로. 당신이 올린 발췌 문장에 대해 "틀린"것은 없습니다. 뭔가 다른 곳에서 문제가 발생하고 있습니다. –

+0

이것을 추적하는 방법에 대한 의견이 있으십니까? 내가 말했듯이이 코드 만이 아니라 동일한 모달에서 일어나는 것처럼 보입니다. 복제 할 수 없으므로 디버깅이 불가능합니다. –

답변

40

Chris가 설명한 바와 같이 귀하의 스 니펫은 유효합니다. 코드의 다른 곳에서 예외를 잘못 catch하고있을 수 있습니다.

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

대신 :

당신은 같은 것을 할 수 있습니다 괄호없이

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

을, 문을 제외하고는 2.6+

except User.MultipleObjectsReturned as User.DoesNotExist: 

파이썬으로 다음에 해당 User.MultipleObjectsReturned 예외의 인스턴스는 User.DoesNotExist을 덮어 씁니다.

나중에 다른 요청을 처리 할 때 코드가 User.DoesNotExist으로 바뀐 예외 인스턴스를 호출하려고하므로 이됩니다.

+0

그럴듯한 후보로 보입니다 –

+2

AWESOME! 고마워, 모든 DoesNotExists에 대한 빠른 grep은 범인을 보여 주었다. LoginKey.DoesNotExist, User.DoesNotExist : –

+0

네,이게 완전히 몇 달 동안 나를 괴롭혔던 문제를 해결했습니다. 나는 단지 "DoesNotExist"에 대한 프로젝트에서 괄호를 잊어 버린 곳을 찾기 위해 찾아 냈습니다. 감사! –

관련 문제