我想知道是否可以编写一个处理异常的方法,比如处理 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')
最佳答案
您可以使用多个 try: except:
但在您当前的情况下为什么不使用 get_or_create
?
try: expect: 包含“Exception”上的所有错误。因为这个语法是全部
except Exception as e:
get_or_create(defaults=None, **kwargs)
A convenience method for looking up an object with the given kwargs (may be empty if your model has defaults for all fields), creating one if necessary.
Returns a tuple of (object, created), where object is the retrieved or created object and created is a boolean specifying whether a new object was created.
这会将您的上述代码减少为 -
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 as e:
raise e
关于python - Django 使用 try : and except:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23464269/