2013-05-26 2 views
7

У меня есть этот вид функции:Джанго - ловить несколько исключений

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 

мой код в порядке? могу ли я поймать несколько исключений таким образом?

ответ

9

Вы можете поймать несколько исключений таким образом

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

приятный приятный, работающий как угодно: D спасибо большое – doniyor

12

Когда вы это в коде:

except Forum.DoesNotExist or IndexError: 

Это фактически оценивается как это:

except (Forum.DoesNotExist or IndexError): 

где бит в круглых скобках - это оцениваемое выражение. Поскольку or возвращает первый из аргументов, если это truthy (которых класс), что на самом деле эквивалентно просто:

except Forum.DoesNotExist: 

Если вы хотите на самом деле поймать несколько различных типов исключений, вы бы вместо используйте кортеж:

except (Forum.DoesNotExist, IndexError): 
Смежные вопросы