我有这个视图功能:
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
我的代码好吗?我能以这种方式捕获多个例外吗?
答案 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')