2011-10-24 15 views
18

No siempre es este fragmento de código, pero este es el más reciente. Parece ser al azar, cualquier pensamiento?TypeError: el objeto 'DoesNotExist' no se puede llamar

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

Lanza este error, al azar.

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

Parece que está realizando una mala tarea en alguna parte. –

+0

De hecho. No hay nada "incorrecto" sobre el fragmento que publicaste. Algo en otro lugar está causando el problema. –

+0

¿Alguna idea sobre cómo rastrear esto? Como dije, este no es solo el código sino que parece suceder en el mismo modal. No podemos replicarlo, por lo que ha sido imposible depurarlo. –

Respuesta

40

Como dice Chris en los comentarios anteriores, su fragmento es válido. En algún otro lugar de tu código, puedes estar capturando excepciones incorrectamente.

Es posible que tenga algo como:

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

en lugar de:

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

Sin los paréntesis, la excepción afirmación es equivalente a la siguiente en Python 2.6+

except User.MultipleObjectsReturned as User.DoesNotExist: 

La instancia de la excepción User.MultipleObjectsReturned sobrescribe User.DoesNotExist.

Cuando el mismo proceso maneja una solicitud diferente más adelante, obtiene el TypeError porque su código está tratando de llamar a la instancia de excepción que ha reemplazado User.DoesNotExist.

+0

Parece un posible candidato –

+2

¡INCREÍBLE! Gracias, un grep rápido para todos los DoesNotExists mostró el culpable. excepto LoginKey.DoesNotExist, User.DoesNotExist: –

+0

Sí, esto solucionó por completo un problema que me ha estado molestando durante meses. Acabo de encontrar en mi proyecto "DoesNotExist", para ver dónde podría estar olvidando los parientes. ¡Gracias! –

Cuestiones relacionadas