2011-10-24 34 views
18

Nó không phải lúc nào cũng là đoạn mã này nhưng đây là đoạn mã mới nhất. Nó có vẻ là ngẫu nhiên, bất kỳ suy nghĩ?LoạiError: đối tượng ‘DoesNotExist’ không được gọi là

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

Ném lỗi này một cách ngẫu nhiên.

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

Có vẻ như bạn đang thực hiện bài tập xấu ở đâu đó. –

+0

Thật vậy. Không có gì "sai" về đoạn trích bạn đã đăng. Một cái gì đó ở một nơi khác đang gây ra vấn đề. –

+0

Bất kỳ suy nghĩ nào về cách theo dõi điều này? Giống như tôi đã nói nó không chỉ là mã này nó có vẻ xảy ra trên cùng một phương thức mặc dù. Chúng tôi không thể sao chép nó để nó không thể gỡ lỗi. –

Trả lời

40

Như Chris đã nói trong các nhận xét ở trên, đoạn mã của bạn hợp lệ. Một nơi nào khác trong mã của bạn, bạn có thể bị bắt ngoại lệ không chính xác.

Bạn có thể có một cái gì đó như:

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

thay vì:

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

Nếu không có dấu ngoặc đơn, ngoại trừ tuyên bố là tương đương với sau trong Python 2.6+

except User.MultipleObjectsReturned as User.DoesNotExist: 

Ví dụ về ngoại lệ User.MultipleObjectsReturned ghi đè User.DoesNotExist.

Khi cùng một quá trình xử lý yêu cầu khác sau này, bạn nhận được số TypeError vì mã của bạn đang cố gắng gọi trường hợp ngoại lệ đã thay thế User.DoesNotExist.

+0

Điều đó có vẻ giống như một ứng cử viên có khả năng –

+2

TUYỆT VỜI! Cảm ơn, một grep nhanh chóng cho tất cả những người không biết gì đã cho thấy thủ phạm. ngoại trừ LoginKey.DoesNotExist, User.DoesNotExist: –

+0

Vâng, điều này hoàn toàn cố định một vấn đề đó là bugging tôi trong nhiều tháng. Tôi chỉ tìm thấy trong dự án của tôi cho "DoesNotExist", để xem nơi tôi có thể quên parens. Cảm ơn! –

Các vấn đề liên quan