Python/django异常有多慢?

Moh*_*med 6 python django exception

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')
Run Code Online (Sandbox Code Playgroud)

jat*_*ism 15

在性能方面,处理异常将是您最不担心的问题.不过,我建议您使用Django提供的快捷方式:

from django.shortcuts import get_object_or_404
artist = get_object_or_404(Artist, id=id)
Run Code Online (Sandbox Code Playgroud)

哪个分配对象artist或返回404.这是双赢的!

此外,您应该查看django-debug-toolbar,它为开发人员提供渲染/ CPU时间,上下文切换以及各种其他有用的数据花絮,可能只是您需要的工具.

  • 是的,它可以让您免于自己执行逻辑.它与方法1完全相同,只是你使用了`except`而没有例外来匹配on,这意味着它会捕获任何异常(不好).不要害怕例外,它们是语言运作的核心部分!你只需要确保你明智地处理它们. (3认同)
  • +1"处理例外情况对您的表现至关重要." (3认同)

Ned*_*der 10

要真正了解系统的性能,您必须对其进行分析.但是Python是一种鼓励使用这样的异常的语言,因此它们没有像其他语言那样的异常开销.

例如,有时人们会争论这个选择:

if hasattr(obj, "attr"):
    use(obj.attr)
else:
    some_other(obj)
Run Code Online (Sandbox Code Playgroud)

要么:

try:
    use(obj.attr)
except AttributeError:
    some_other(obj)
Run Code Online (Sandbox Code Playgroud)

那些说你应该使用第一个来避免异常的人需要理解内部,hasattr是通过访问属性实现的,如果引发AttributeError则返回False.实际上,两个代码块都使用异常.


zda*_*dav 8

这个家伙做了一个很好的小写测试尝试/除了速度与dicts,我相信它会有一些模拟你的情况.无论哪种方式,做一个漂亮的配置文件将为您提供最好的信息.