Django中ObjectDoesNotExist与DoesNotExist的使用区别及异常处理

季宁
季宁
发布时间:2026-10-14 | 2人浏览过
原创

本文详解Django中ObjectDoesNotExist与DoesNotExist的区别,前者需导入,后者为Model属性。通过代码示例展示如何捕获查询不存在的对象,并使用try-except语句避免程序终止,确保后续代码正常执行。

ObjectDoesNotExist 与 DoesNotExist 的区别

为了更直观地理解,下面通过具体示例进行说明。

示例1:


from django.core.exceptions import ObjectDoesNotExist
try:
  pe = Plant.objects.get(id=12873)
except ObjectDoesNotExist:
  print "uuuu"
uuuu
# 我随意找了一个id=12873的对象来查询,当然,数据库里没有这个id,可以看到结果正常的打印出来

示例2:


try:
  pe = Plant.objects.get(id=12873)
except Plant.DoesNotExist:
  print "rrr"
rrr
# 结果也如期打印,那么来看看model的属性
dir(Plant) 
['DoesNotExist',
 'MultipleObjectsReturned',
 '__class__',
 '__delattr__',
 '__dict__',
 '__doc__',
 ......
# DoesNotExist正在其中

总结:ObjectDoesNotExist 和 DoesNotExist 表达的含义相同,仅写法不同。前者需要显式导入,后者是 Model 类的属性,具体使用方式可根据个人习惯选择。

补充知识:Django入门:DoesNotExist: User matching query does not exist.

异常场景分析与解决方案

首先分析引发该问题的具体代码场景。

User.objects.filter(username='sss').get().username

当在 Python 脚本中使用上述代码判断 username 是否等于 'sss' 时,若数据库中确实存在该用户,则返回正确结果;但若查询的用户不存在,则会抛出标题所示的错误(DoesNotExist: User matching query does not exist.),导致程序终止运行。程序终止意味着后续代码不再执行,从而无法得到预期的结果。

由此问题可以引申出:遇到同类问题应如何解决?

可以使用 try…except… 语句将可能导致程序终止的代码包裹其中,具体写法如下:


try:
 User.objects.filter(username=username).get().username
except:
 pass

附注:try…except… 语句用于异常处理,即所有可能导致程序异常的代码块都可以使用 try…except… 来引导程序执行。

以上关于 Django 中 ObjectDoesNotExist 和 DoesNotExist 用法的分享到此结束,希望能对大家有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表