2013-05-26 12 views
7

mam tę funkcję wyświetlania:Django - Catch wiele wyjątków

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

ale nadal daje następujący błąd na linii powyżej problem:

IndexError: list index out of range 

jest mój kod w porządku? Czy mogę w ten sposób wychwycić wiele wyjątków?

Odpowiedz

9

Możesz złapać wielu wyjątków w ten sposób

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

miło, działa jak cokolwiek: D bardzo dziękuje – doniyor

12

Gdy już to w kodzie:

except Forum.DoesNotExist or IndexError: 

to faktycznie ocenianej jako to:

except (Forum.DoesNotExist or IndexError): 

gdzie bit w nawiasach jest wyrażonym wyrażeniem. Od or zwraca pierwszy z jej argumentów, czy to truthy (która klasa jest), to rzeczywiście równoważne jedynie:

except Forum.DoesNotExist: 

Jeśli chcesz faktycznie złapać wiele różnych typów wyjątków, to że zamiast użyj krotki:

except (Forum.DoesNotExist, IndexError): 
Powiązane problemy