【问题标题】:django - catch multiple exceptionsdjango - 捕获多个异常
【发布时间】:2013-05-21 05:43:04
【问题描述】:

我有这个视图功能:

def forum(request):
qs = Forum.objects.all()
try:
    f = Forum.objects.filter().order_by('-id')[0] <------------problem
    return render_to_response("forum.html",{'qs':qs,'f':f},context_instance=RequestContext(request))
except Forum.DoesNotExist or IndexError:
    return render_to_response("forum.html",{'qs':qs},context_instance=RequestContext(request))

但对于上面的问题行,它仍然给出以下错误:

IndexError: list index out of range

我的代码好吗?我可以通过这种方式捕获多个异常吗?

【问题讨论】:

    标签: python django exception


    【解决方案1】:

    如果你想记录/处理每个异常,那么你可以这样做。

    from django.core.exceptions import ObjectDoesNotExist
    
    try:
        your code here
    except KeyError:
        logger.error('You have key error')
    except ObjectDoesNotExist:
        logger.error('Object does not exist error')
    

    【讨论】:

      【解决方案2】:

      当你的代码中有这个时:

      except Forum.DoesNotExist or IndexError:
      

      实际上是这样评价的:

      except (Forum.DoesNotExist or IndexError):
      

      括号中的位是计算表达式。由于or 返回其第一个参数,如果它是真实的(类是),这实际上等同于:

      except Forum.DoesNotExist:
      

      如果您想实际捕获多种不同类型的异常,您应该使用元组:

      except (Forum.DoesNotExist, IndexError):
      

      【讨论】:

        【解决方案3】:

        您可以通过这种方式捕获多个异常

        try:
            ...
        except (Forum.DoesNotExist, IndexError) as e:
           ...
        

        【讨论】:

        • 为什么没有包罗万象?指定每个异常是愚蠢的。
        • @AlxVallejo 您根本不必捕获特定异常。为更好地处理而指定异常是常见的做法,但您可以简单地说:except Exception, error: 并收工。
        猜你喜欢
        • 2020-05-10
        • 2012-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-13
        • 2013-01-31
        • 1970-01-01
        相关资源
        最近更新 更多