Только «raise» завершает программу или нет?

#python #exception

#python #исключение

Вопрос:

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

    try:
        for record in result:
            products.append(record['p'])
    except ServiceUnavailable as exception:
        logger.error("{query} raised an error: n {exception}".format(
            query=query, exception=exception))
        raise
 

В Python ключевое слово ‘raise’ завершает работу программы или нет при возникновении исключения? Если оно завершается, должен ли я удалить «повышение» и регистрировать только эту ошибку, чтобы один сбой при поиске базы данных не привел к сбою всей системы. Это верно?

Ответ №1:

Голый raise перебрасывает исключение, обнаруженное в except блоке. Завершится ли программа или нет, зависит от вызывающего абонента — если он перехватит и обработает это исключение, программа может продолжить работу. Если этого не произойдет, программа завершится (ненормально).

Комментарии:

1. Если я не хочу, чтобы это завершалось, и я могу изменить этот код, и если я просто удалю «повышение», программа не выйдет из строя. Верно?

2. @marlon если вы этого не raise сделаете, исключение будет перехвачено, и программа не завершится.