2013-05-17 7 views
5

は、私はこのコードを持って言う:単一の関数に対して例外タイプを宣言することは妥当ですか?

def wait_for_x(timeout_at=None): 
    while condition_that_could_raise_exceptions 
     if timeout_at is not None and time.time() > timeout_at: 
      raise SOMEEXCEPTIONHERE 

     do_some_stuff() 

try: 
    foo() 
    wait_for_x(timeout_at=time.time() + 10) 
    bar() 
except SOMEEXCEPTIONHERE: 
    # report timeout, move on to something else 

はどのように機能するために例外型SOMEEXCEPTIONHEREを選ぶのですか? condition_that_could_raise_exceptionsが同じ例外タイプを引き上げる危険性がないように、その関数に固有の例外タイプを作成することは妥当ですか?

wait_for_x.Timeout = type('Timeout', (Exception,), {}) 
+1

Python 3.3では、組み込みの 'TimeoutError'を使うことができました。 – dan04

答えて

1

はい、組み込みの例外タイプが適切でない場合は、必ず独自の例外クラスを定義する必要があります。たとえば、LXMLやBeautifulSoupの上に何らかのHTMLマインジャーを構築している場合、他のモジュールの例外を使用することも適切な場合があります。

1

wait_for_xの例外とcondition_that_could_raise_exceptionsの例外を区別することが十分重要である場合は、必ず新しい例外タイプを定義してください。結局のところ、型は例外の種類を区別する主な方法であり、メッセージの解析は非常に手早くなる傾向があります。

0

Python標準ライブラリは、多くの独自のカスタム例外を定義しています。個人的なモジュールや機能のためにもそうするのが良い習慣と思われます。

関連する問題