是python异常慢吗? 我正在使用python异常来构建我的Web应用程序中的programm,我想知道抛出异常将如何影响我的应用程序的性能。你的想法是什么?
以下哪一项声明在内存和CPU方面都较便宜?
try:
artist = Artist.objects.get(id=id)
except:
raise Http404
artist = Artist.objects.filter(id=id)
if not artist:
return HttpResponse('404')
答案 0 :(得分:15)
在性能方面,处理异常将是您最不担心的问题。但是,我建议您使用Django提供的快捷方式:
from django.shortcuts import get_object_or_404
artist = get_object_or_404(Artist, id=id)
将对象分配给artist
或返回404.这是双赢的!
此外,您应该查看django-debug-toolbar,它为开发人员提供渲染/ CPU时间,上下文切换以及各种其他有用的数据花絮,可能只是您需要的工具。
答案 1 :(得分:10)
要真正了解系统的性能,您必须对其进行分析。但是Python是一种鼓励使用这样的异常的语言,所以它们没有像其他语言那样的异常开销。
例如,有时候人们会讨论这个选择:
if hasattr(obj, "attr"):
use(obj.attr)
else:
some_other(obj)
或:
try:
use(obj.attr)
except AttributeError:
some_other(obj)
那些说你应该使用第一个来避免异常的人需要了解内部,hasattr是通过访问属性实现的,如果引发AttributeError则返回False。事实上,两个代码块都使用异常。
答案 2 :(得分:8)
This guy做了一个很好的小写测试尝试/除了速度与dicts,我相信在你的情况下会有一些类比。无论哪种方式,做一个漂亮的配置文件将为您提供最好的信息。