Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何在处理其他异常的同时忽略异常_Python_Django_Exception_Exception Handling - Fatal编程技术网

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,从“提问”页面,您可以选中一个框并添加您自己的问题答案。