2011-10-24 13 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」,以查看我可能會忘記哪些東西。謝謝! –