两种检查相同数据是否存在的方法:
1
try:
MyModel.objects.create(
field1=field1_value,
field2=field1_value,
)
except IntegrityError:
# doing something
2
qs = MyModel.objects.filter(field1=field1_value, field2=field2_value)
if qs.exists():
# doing something
我想知道哪种方法更可取。
答案 0 :(得分:0)
Try-Except比if-else语句的效率效率低...但是由于它的多功能性和下面的要点,因此更可取 ...因此答案的确取决于您的用例...如果您尝试运行高性能实时应用程序,如果更好则更好,但是如果您正在编写通用库,那么您不知道会发生什么故障或如何发生故障。用户想要处理它,那么Try-Except更好。
您可以使用“尝试除外”块访问Finally。
除了在遇到错误时不会停止代码停止之外,如果您正在处理狭窄的异常类型,这尤其可取。
您也不必像在if else语句中那样必须预测何时在代码块中发生异常。那是..
try:
# do some things before
MyModel.objects.create(
field1=field1_value,
field2=field1_value,
)
# do some things after
except IntegrityError:
# catch the exception regardless of where in the Try Block the failure occured
但是,如果使用if语句,则必须预测失败点将在MyModels.objects.create()
调用处,这是一个很容易避免的潜在错误。