2016-06-28 4 views
0

В том, что я написал, NoResultException может быть поднят либо в моем блоке try, либо в моем блоке except UnexpectedAlertPresentException. Я хотел бы перейти в блок except NoResultException в любом случае, но он делает это только в том случае, если NoResultException поднят в блоке try. Это примерно то, что я сейчас:Исключение для справки, поднятое в исключении.

try: 
    # do things 
except UnexpectedAlertPresentException: 
    # do other things, including possibly raise NoResultException 
except NoResultException: 
    # handle exception 

Я мог бы изменить его на что-то вроде этого:

try: 
    # do things 
except UnexpectedAlertPresentException: 
    try: 
     # do other things, including possibly raise NoResultException 
    except NoResultException: 
     # handle exception 
except NoResultException: 
    # handle exception 

обрабатывать NoResultException, но я стараюсь не повторять себя. Есть ли лучший способ сделать это?

+2

Как правило, вы не должны выполнять операции в блоке 'except', который может вызывать больше исключений, но если вам нужно, вы можете разделить обработку на отдельную функцию, которая обрабатывает возможность внутреннего исключения –

ответ

1
try: 
    try: 
     # do things 
    except UnexpectedAlertPresentException: 
     # do other things, including possibly raise NoResultException 
except NoResultException: 
    # handle exception 

Постарайтесь не заходить за борт с потоком управления исключением. Логика может очень тяжело рассуждать, и отступы могут стать очень глубокими.

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