每当我这样做:
thepost = Content.objects.get(name="test")
Run Code Online (Sandbox Code Playgroud)
当找不到任何内容时,它总是会抛出错误.我该如何处理?
Som*_*ude 74
try:
thepost = Content.objects.get(name="test")
except Content.DoesNotExist:
thepost = None
Run Code Online (Sandbox Code Playgroud)
使用模型DoesNotExist异常
Rob*_*ing 26
通常,直接使用Django快捷方式函数get_object_or_404而不是API 更有用:
from django.shortcuts import get_object_or_404
thepost = get_object_or_404(Content, name='test')
Run Code Online (Sandbox Code Playgroud)
很明显,如果无法找到对象,这将抛出404错误,如果成功,您的代码将继续.
小智 15
您还可以捕获通用的DoesNotExist.根据http://docs.djangoproject.com/en/dev/ref/models/querysets/上的文档
from django.core.exceptions import ObjectDoesNotExist
try:
e = Entry.objects.get(id=3)
b = Blog.objects.get(id=1)
except ObjectDoesNotExist:
print "Either the entry or blog doesn't exist."
Run Code Online (Sandbox Code Playgroud)
小智 9
另一种写作方式:
try:
thepost = Content.objects.get(name="test")
except Content.DoesNotExist:
thepost = None
Run Code Online (Sandbox Code Playgroud)
很简单:
thepost = Content.objects.filter(name="test").first()
Run Code Online (Sandbox Code Playgroud)
请注意,两者并不完全相同.get如果没有您要查询的记录,以及找到多条记录时,Manager方法不仅会引发异常.使用first多个记录时,可能会通过返回第一条记录来静默地使业务逻辑失败.
抓住例外
try:
thepost = Content.objects.get(name="test")
except Content.DoesNotExist:
thepost = None
Run Code Online (Sandbox Code Playgroud)
或者你可以过滤,如果没有匹配,它将返回一个空列表
posts = Content.objects.filter(name="test")
if posts:
# do something with posts[0] and see if you want to raise error if post > 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34446 次 |
| 最近记录: |