2011-10-24 14 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

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

你可能有这样的事情:

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

代替:

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

如果没有括号,在Python 2.6+

except User.MultipleObjectsReturned as User.DoesNotExist: 

继except语句相当于User.MultipleObjectsReturned例外的实例将覆盖User.DoesNotExist

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

+0

这似乎是一个可能的候选人 –

+2

真棒!谢谢,所有DoesNotExists的快速grep显示罪魁祸首。除了LoginKey.DoesNotExist,User.DoesNotExist: –

+0

是的,这完全解决了几个月来一直困扰着我的问题。我只是在我的项目中找到了“DoesNotExist”,以查看我可能会忘记哪些东西。谢谢! –