2013-05-17 27 views
5

Say mam ten kod:Czy można zadeklarować typ wyjątku dla pojedynczej funkcji?

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 

Jak mogę wybrać typ wyjątku SOMEEXCEPTIONHERE dla funkcji? Czy jest rozsądne utworzenie unikalnego typu wyjątku dla tej funkcji, tak aby nie było niebezpieczeństwa, że ​​condition_that_could_raise_exceptions podniesie ten sam typ wyjątku?

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

W Pythonie 3.3 można użyć wbudowanego 'TimeoutError'. – dan04

Odpowiedz

1

Tak, należy definitywnie zdefiniować własną klasę wyjątków, gdy żaden z wbudowanych typów wyjątków nie jest odpowiedni. W niektórych przypadkach (powiedzmy, jeśli tworzysz coś w rodzaju mungera HTML na LXML lub BeautifulSoup), może być również stosowne użycie wyjątku z jakiegoś innego modułu.

1

Jeśli wyróżnienie wyjątków od wait_for_x z tych z condition_that_could_raise_exceptions jest wystarczająco ważne, to z pewnością zdefiniuj nowy typ wyjątku. W końcu typ jest głównym sposobem rozróżniania różnych rodzajów wyjątków, a przetwarzanie komunikatu powoduje, że dość szybko staje się bałaganiarski.

0

Standardowa biblioteka Python definiuje wiele własnych niestandardowych wyjątków. Wydaje się, że dobrą praktyką jest robienie tego również w przypadku modułów osobistych lub funkcji.

Powiązane problemy