Как вызвать исключение и перехватить его после завершения выполнения функции? - PullRequest
0 голосов
/ 19 марта 2020

В моем коде есть строка, которая может вызвать исключение, я хотел бы обработать это исключение и продолжить выполнение.

def foo():
    #good code
    if thingThatHappensSometimes:
        raise CustomException
    #code i want to execute
    return resultIwant

def bar():
    resultIwant = None
    try:
        #good code
        resultIwant = foo()
    except CustomException:
        #code that should run if an exception was raised
    finally:
        print(resultIwant)
        print('All done!')

Моя проблема здесь в том, что существуют ситуации, когда foo будет вызвать исключение, но в коде logi c нет ничего, что мешало бы ему генерировать результат для resultIwant. В настоящее время, если я обработаю исключение в баре, я не достигну конца выполнения для foo, но если я обработаю исключение в foo, исключение уже будет обработано, и я не достигну блока исключений в баре. Есть ли способ решить эту проблему?

1 Ответ

1 голос
/ 19 марта 2020

Возбуждение исключения останавливает выполнение на этом этапе, поэтому вы не можете одновременно вызвать исключение и вернуть значение. Но вы можете вернуть (value, exception_or_none) кортеж:

def foo():
    error = None    
    #good code
    if thingThatHappensSometimes:
        error = CustomException()
    #code i want to execute
    return resultIwant, error

def bar():
    #good code
    resultIwant, error = foo()
    if error: 
        #code that should run if an exception was raised
    print(resultIwant)
    print('All done!')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...