don*_*yor 8 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))
Run Code Online (Sandbox Code Playgroud)
但它仍然为上面的问题行提供以下错误:
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)
我的代码好吗?我能以这种方式捕获多个例外吗?
Amb*_*ber 15
在代码中有这个:
except Forum.DoesNotExist or IndexError:
Run Code Online (Sandbox Code Playgroud)
它实际上被评估为:
except (Forum.DoesNotExist or IndexError):
Run Code Online (Sandbox Code Playgroud)
括号中的位是一个计算表达式.因为or如果它是真正的(它是一个类),它返回它的第一个参数,那实际上只相当于:
except Forum.DoesNotExist:
Run Code Online (Sandbox Code Playgroud)
如果你想实际捕获多种不同类型的异常,你可以改为使用元组:
except (Forum.DoesNotExist, IndexError):
Run Code Online (Sandbox Code Playgroud)
Bra*_*don 12
您可以通过这种方式捕获多个异常
try:
...
except (Forum.DoesNotExist, IndexError) as e:
...
Run Code Online (Sandbox Code Playgroud)
如果你想记录/处理每个异常,那么你可以这样做。
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')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5189 次 |
| 最近记录: |