2013-05-17 55 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 Munger),使用其他模塊的異常也是適當的。

1

如果要區分wait_for_xcondition_that_could_raise_exceptions的異常是否足夠重要,那麼一定要定義一個新的異常類型。畢竟,這種類型是區分不同種類異常的主要方式,解析消息往往很快就會變得混亂。

0

Python標準庫定義了很多自己的自定義異常。對個人模塊或功能來說,這似乎也是一種很好的做法。

相關問題