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

を、声明を除く2.6+

except User.MultipleObjectsReturned as User.DoesNotExist: 

Pythonで次のように相当しますUser.MultipleObjectsReturned例外のインスタンスはUser.DoesNotExistを上書きします。

後で別の要求を処理するときに、コードがUser.DoesNotExistを置き換えた例外インスタンスを呼び出そうとしているので、 のTypeErrorが返されます。

+0

これはおそらく候補者のようです。 –

+2

AWESOME!ありがとう、すべてのDoesNotExistsのための迅速なgrepは、犯人を示した。 LoginKey.DoesNotExist、User.DoesNotExist: –

+0

を除いて、まあ、これは数ヶ月間私を悩ませている問題を完全に解決しました。私は「DoesNotExist」のプロジェクトで、どこで括約筋を忘れているのかを知りました。ありがとう! –

関連する問題