我想知道是否有可能编写处理异常,例如2或更多,除非有不同的任务要做。
我正在使用Django==1.6.1
和Python 2.7
try:
foo_instance = foo.objects.get(field_name='unknown')
except foo.DoesNotExist:
new_rec = foo.objects.create(field_name='unknown')
new_rec.save()
foo_instance = foo.objects.get(field_name='unknown')
except foo.MultipleObjectsReturned:
foo_list = foo.objects.filter(field_name='unknown')
for record in foo_list[1:]:
print 'Deleting foo id: ', record.id
record.delete()
foo_instance = foo.objects.get(field_name='unknown')
答案 0 :(得分:3)
您可以使用多个try: except:
但在当前情况下为什么不使用get_or_create
?
get_or_create(默认值=无,** kwargs)
使用给定的kwargs查找对象的便捷方法 (如果您的模型具有所有字段的默认值,则可能为空),创建一个 如果有必要的话。
返回(object,created)的元组,其中object是检索到的或 创建的对象和创建的是一个布尔值,指定是否为新的 对象已创建。
这会将您的上述代码缩减为 -
obj, created = foo.objects.get_or_create(field_name='unknown')
if created:
obj.save()
我认为get_or_create
会引发IntegrityError
或MultipleObjectsReturned
来处理这些问题,只需将其包装在试试中:
try:
obj, created = foo.objects.get_or_create(field_name='unknown')
if created:
obj.save()
except IntegrityError:
#do something
except MultipleObjectsReturned:
#do something else
except Exception e:
raise e