11

我有这个视图功能:

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

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

4

3 回答 3

17

当您的代码中有此内容时:

except Forum.DoesNotExist or IndexError:

它实际上是这样评估的:

except (Forum.DoesNotExist or IndexError):

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

except Forum.DoesNotExist:

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

except (Forum.DoesNotExist, IndexError):
于 2013-05-26T00:08:53.800 回答
14

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

try:
    ...
except (Forum.DoesNotExist, IndexError) as e:
   ...
于 2013-05-26T00:04:07.807 回答
5

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

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')
于 2018-05-17T04:23:08.067 回答