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
1 个回答
43
正如Chris在上面的评论中提到的,你的代码片段是有效的。不过在你代码的其他地方,可能有地方处理异常的方式不太对。
你可能写成了这样:
try:
do_something()
except User.MultipleObjectsReturned, User.DoesNotExist:
pass
而不是:
try:
do_something()
except (User.MultipleObjectsReturned, User.DoesNotExist):
pass
如果没有括号,except语句在Python 2.6及以上版本中就等同于下面的写法:
except User.MultipleObjectsReturned as User.DoesNotExist:
User.MultipleObjectsReturned
这个异常的实例会覆盖掉User.DoesNotExist
。
当同一个过程在后面处理不同的请求时,你会遇到TypeError
,因为你的代码试图调用那个已经替代了User.DoesNotExist
的异常实例。