2013-05-17 9 views
5

Dire che ho questo codice:È ragionevole dichiarare un tipo di eccezione per una singola funzione?

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 

Come faccio a scegliere un tipo di eccezione SOMEEXCEPTIONHERE per la funzione? È ragionevole creare un tipo di eccezione univoco per quella funzione, in modo che non ci sia il pericolo che lo condition_that_could_raise_exceptions innalzi lo stesso tipo di eccezione?

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

In Python 3.3, è possibile utilizzare il 'TimeoutError' incorporato. – dan04

risposta

1

Sì, si dovrebbe certamente definire la propria classe di eccezione ogni volta che nessuno dei tipi di eccezione built-in sono appropriati. In alcuni casi (per esempio, se stai costruendo un qualche tipo di munger HTML su LXML o BeautifulSoup) potrebbe essere appropriato usare un'eccezione da qualche altro modulo.

1

Se distinguere le eccezioni da wait_for_x da quelle da condition_that_could_raise_exceptions è sufficientemente importante, quindi sicuro, definire un nuovo tipo di eccezione. Dopotutto, il tipo è il modo principale per distinguere i diversi tipi di eccezioni e l'analisi del messaggio tende a diventare piuttosto rapida.

0

Python Standard Library definisce molte delle proprie eccezioni personalizzate. Sembra una buona pratica farlo anche per moduli o funzioni personali.

Problemi correlati