2009-12-11 10 views
6

はPython例外が遅いですか? 私はPythonの例外を使用して、構造化プログラムのWebアプリケーションに従っていますが、例外をスローすることがアプリケーションのパフォーマンスにどのように影響するかは疑問です。あなたの考えは何ですか?Python/djangoの例外はどれくらい遅いですか?

次の文のいずれかがメモリとCPUの点で安価ですか?

try: 
    artist = Artist.objects.get(id=id) 
except: 
    raise Http404 


artist = Artist.objects.filter(id=id) 
if not artist: 
    return HttpResponse('404') 
+5

Naked except節は避けてください。 – u0b34a0f6ae

答えて

15

処理に関する例外は、パフォーマンスに関して最も懸念されるものではありません。

from django.shortcuts import get_object_or_404 
artist = get_object_or_404(Artist, id=id) 

artistにオブジェクトを割り当てるかそれはウィンウィンをだ404を返すのいずれか:私はあなたのためにジャンゴが提供するショートカットを使用していること、しかし、お勧めします!

django-debug-toolbarまた、レンダリング/ CPU時間、コンテキストスイッチ、および開発者向けのその他の役立つ情報のすべての種類のチュートリアルが用意されています。必要なツールにすぎません。

+0

これも例外を使用していますか?私は方法1とどのように違うのか分かりません。 – Mohamed

+3

はい、それはありますが、自分でロジックを実行する必要がありません。これはメソッド1と同じですが、例外を除いて 'except'を使用してonにマッチさせます。つまり、例外を捕捉します。例外を恐れないでください、彼らは言語の仕組みの中核部分です!賢明にそれらを扱っていることを確認するだけです。 – jathanism

+3

+1「処理に関する例外は、パフォーマンスに関するあなたの心配の中で最も少なくなります。 – cethegeek

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を返すことによって実装されます。実際、両方のコードチャンクは例外を使用します。

8

This guy私はあなたのケースでいくつかのアナログを持っていると確信しています。いずれにしても、素敵なプロフィールをやってみると、最高の情報が得られます。

関連する問題