我对Django exists()
和DoesNotExist
异常有一些疑问。
示例代码:
id = 1
# first
if User.objects.get(pk=id).exists():
# my logic
pass
# second
try:
User.objects.get(pk=id)
# my logic
pass
except User.DoesNotExist:
return 0
我经常使用
get()
方法。哪种做法更好?哪个代码更好?第一还是第二? 最佳答案
这是行不通的,所以这个问题很容易回答:这种方式不如行之有效的方式:-)
我猜您实际上没有制作Minimal Complete Verifiable Example,因此在发布未经验证的代码时错过了该错误。
因此,我想您是在询问以下两者之间的区别:
拥有QuerySet时的
QuerySet.exists()
(例如,通过过滤操作)。例如:
if User.objects.filter(pk=id).exists():
# ... do the things that need that user to exist
Model.objects.get(…)
并捕获 Model.DoesNotExist
exception type(或者,如果您想更通用一些,请输入父类 ObjectDoesNotExist
)。例如:
try:
user = User.objects.get(pk=id)
except User.DoesNotExist:
# ... handle the case of that user not existing
区别在于:
QuerySet.exists
方法位于查询集上,这意味着您向其询问查询(“是否有与该查询匹配的实例?”),并且您尚未尝试检索任何特定实例。 DoesNotExist
异常。 使用正确表达您意图的任何一种。