django - 捕获多个异常

时间:2013-05-26 00:01:57

标签: python django exception

我有这个视图功能:

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

我的代码好吗?我能以这种方式捕获多个例外吗?

3 个答案:

答案 0 :(得分:13)

如果您的代码中有此内容:

except Forum.DoesNotExist or IndexError:

它实际上被评估为:

except (Forum.DoesNotExist or IndexError):

其中括号中的位是计算表达式。因为or返回它的第一个参数,如果它是真实的(一个类是),那实际上只相当于:

except Forum.DoesNotExist:

如果你想真正捕获多种不同类型的异常,你可以使用元组:

except (Forum.DoesNotExist, IndexError):

答案 1 :(得分:12)

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

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

答案 2 :(得分:0)

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

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')