Python:如何在处理其他异常的同时忽略异常
我在处理一些代码时遇到了一个特殊的问题:Python:如何在处理其他异常的同时忽略异常,python,django,exception,exception-handling,Python,Django,Exception,Exception Handling,我在处理一些代码时遇到了一个特殊的问题: def find_available_slug(object, instance, slug) try: sender_node = object.objects.get(slug=slug) except object.DoesNotExist: instance.slug = slug else: slug = '%s_' % slug find_availabl
def find_available_slug(object, instance, slug)
try:
sender_node = object.objects.get(slug=slug)
except object.DoesNotExist:
instance.slug = slug
else:
slug = '%s_' % slug
find_available_slug(object, instance, slug)
return
我遇到的问题是,有时
objects.get(slug=slug)
会抛出multipleobjectsreerned
异常,因为该字段在我的数据库中不是唯一的。我想知道如何在“else”语句仍将执行的情况下干净地捕获multipleobjectsreentern
。简单的解决方案:技巧是在调用get
方法时,将multipleobjectsreentern
捕获到第二个try
语句中。这样,不会引发异常,执行将正常继续
作品:
def find_available_slug(object, instance, slug)
try:
try:
sender_node = object.objects.get(slug=slug)
except object.MultipleObjectsReturned:
pass
except object.DoesNotExist:
instance.slug = slug
else:
slug = '%s_' % slug
find_available_slug(object, instance, slug)
return
不起作用:
def find_available_slug(object, instance, slug)
try:
sender_node = object.objects.get(slug=slug)
except object.MultipleObjectsReturned:
pass
except object.DoesNotExist:
instance.slug = slug
else:
slug = '%s_' % slug
find_available_slug(object, instance, slug)
return
第二个“naive”方法不起作用的原因是,如果捕获到异常,解释器将不会执行
else:
子句。它将以静默方式返回
简单的解决方案:技巧是在调用get
方法时,在第二个try
语句中捕获多个返回的对象。这样,不会引发异常,执行将正常继续
作品:
def find_available_slug(object, instance, slug)
try:
try:
sender_node = object.objects.get(slug=slug)
except object.MultipleObjectsReturned:
pass
except object.DoesNotExist:
instance.slug = slug
else:
slug = '%s_' % slug
find_available_slug(object, instance, slug)
return
不起作用:
def find_available_slug(object, instance, slug)
try:
sender_node = object.objects.get(slug=slug)
except object.MultipleObjectsReturned:
pass
except object.DoesNotExist:
instance.slug = slug
else:
slug = '%s_' % slug
find_available_slug(object, instance, slug)
return
第二个“naive”方法不起作用的原因是,如果捕获到异常,解释器将不会执行else:
子句。它将以静默方式返回
,或者根本不使用else
子句:
def find_available_slug(object, instance, slug)
try:
sender_node = object.objects.get(slug=slug)
except object.DoesNotExist:
instance.slug = slug
return
except object.MultipleObjectsReturned:
pass
slug = '%s_' % slug
find_available_slug(object, instance, slug)
或者,根本不要使用else
子句:
def find_available_slug(object, instance, slug)
try:
sender_node = object.objects.get(slug=slug)
except object.DoesNotExist:
instance.slug = slug
return
except object.MultipleObjectsReturned:
pass
slug = '%s_' % slug
find_available_slug(object, instance, slug)
@塞伯布朗。。你刚才回答了你自己的问题吗??或者我失明了???@RohitJain——回答你自己的问题没什么错。这种事发生得有点频繁。@mgilson.嗯,我刚问过。。因为他提问和回答之间的时间只有几秒钟。。除此之外,当然没有错。@RohitJain,从“提问”页面,您可以勾选一个框,然后添加您自己的问题答案。@sebleblanc。。你刚才回答了你自己的问题吗??或者我失明了???@RohitJain——回答你自己的问题没什么错。这种事发生得有点频繁。@mgilson.嗯,我刚问过。。因为他提问和回答之间的时间只有几秒钟。。除此之外,当然没有什么错。@RohitJain,从“提问”页面,您可以选中一个框并添加您自己的问题答案。