我对 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()
方法。哪种做法更好?哪个代码更好?第一还是第二?
原文由 Dato Gachechiladze 发布,翻译遵循 CC BY-SA 4.0 许可协议
这行不通,所以这个问题很容易回答:这种方式不如有效的方式:-)
我猜你实际上没有制作 最小完整可验证示例,因此在发布未经验证的代码时错过了错误。
因此,相反,我想您是在询问以下两者之间的区别:
QuerySet.exists()
当你有一个查询集时(例如来自过滤操作)。例如:
Model.objects.get(…)
并捕获Model.DoesNotExist
异常类型(或者,如果你想更通用,父类型ObjectDoesNotExist
)。例如:
区别在于:
QuerySet.exists
方法在查询集上,这意味着您向它询问查询(“是否有与该查询匹配 的 实例?”),并且您尚未尝试检索任何特定实例。模型的
DoesNotExist
异常在您 实际尝试 检索一个实例时引发,但它不存在。使用任何一个正确表达你的意图。