我和一些同事就这个问题进行了辩论。
两种明显的方法是:
try:
obj = MyModel.objects.get(id=1)
except MyModel.DoesNotExist:
# We have no object! Do something...
pass
和:
objs = MyModel.objects.filter(id=1)
if len(objs) == 1:
obj = objs[0]
else:
# We have no object! Do something...
pass
第一种方法在行为上似乎更正确,但在控制流中使用异常,这可能会带来一些开销。
对于其中哪一个更可取有什么想法吗?
答案
选项 2 几乎正是如何get()
方法实际上是在 Django 中实现的,因此不应该有"性能"差异(事实上,您正在考虑它,这表明您违反了编程的基本规则之一,即在编写代码之前尝试对其进行优化)