Python 报错 TypeError:’DoesNotExist’对象不可调用

这两年,Python 再次大火。导致越来越多的人学 Python,但是新手学 Python 一般会遇到各种各样的问题。

今天,我又在 Stackoverflow 上看到了一个 Python 非常著名的 TypeError 错误问题:DoesNotExist 对象不可调用。今天我们一起来看看这个问题该如何解决!

TypeError: ‘DoesNotExist’ object is not callable

我们现在看下面这个代码块:

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

这段代码并不总是曝出 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

错误详情大概如上所示。正常情况下,这段代码是有效的。但它却总是随机的抛出 DoesNotExist 错误。

在 Stackoverflow 上,有人建议我们将下面的代码进行替换。

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:

User.MultipleObjectsReturned 异常的实例覆盖 User.DoesNotExist。

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

Python 报错 TypeError:’DoesNotExist’对象不可调用

: » Python 报错 TypeError:’DoesNotExist’对象不可调用

原创文章,作者:6024010,如若转载,请注明出处:https://blog.ytso.com/252924.html

(0)
上一篇 2022年5月5日
下一篇 2022年5月5日

相关推荐

发表回复

登录后才能评论