2014-11-20 2 views
0

Допустит, у меня есть это:Python, как исключить исключения из «поймать всех»

try: 
    result = call_external_service() 
    if not result == expected: 
     raise MyException() 
except MyException as ex: 
    # bubble up 
    raise ex 
except Exception: 
    # unexpected exceptions from calling external service 
    do_some_logging() 

Из-за мое ограниченное знание Python, я не могу думать о шикарном пути пузыря вверх по MyException исключения, я надеялся, Я могу сделать что-то вроде:

try: 
    result = call_external_service() 
    if not result == expected: 
     raise MyException() 
except Exception, exclude(MyException): 
    # unexpected exceptions from calling external service 
    do_some_logging() 
+0

Я бы, наверное, просто снова поднять его, если тип соответствует MyException – user2682863

+0

1) Что случилось с первым кодом? 2) Почему ваш вопрос начинается с «Позвольте мне уточнить больше»? Вы продолжаете разговор из другого места? –

+0

@NedBatchelder 1) Я думаю, что поймать его и переподнять не очень-то прямо, чтобы читать. 2) Я думал, что название недостаточно ясно, поэтому я сказал «подробнее», но я его обновил. –

ответ

1

Ваша проблема заключается в том, что вы перематываете слишком много кода в блок try. Что об этом ?:

try: 
    result = call_external_service() 
except Exception: 
    # unexpected exceptions from calling external service 
    do_some_logging() 

if result != expected: 
    raise MyException() 
+0

это имеет смысл :) –

+0

Я думаю, что 'if result! = Expected:' немного упрощен в моем случае, иногда мне нужно получить доступ к элементам 'result', а' result' может не быть типом, который я получаю после , Я просто должен добавить больше try/except blocks then ... –

Смежные вопросы