Что такое конструкция try…except…else в Python

В этом руководстве вы узнаете, как использовать конструкцию Python try…except…else для обработки исключений.

Оператор try имеет необязательное условие else со следующим синтаксисом:

try:
    # code that may cause errors
except:
    # code that handle exceptions
else:
    # code that executes when no exception occurs

Оператор try…except…else работает следующим образом:

  • Если в предложении try возникает исключение, Python пропускает остальные операторы в предложении try и выполняется оператор except.
  • Если в операторе try не возникает исключения, будет выполнено условие else.

Когда вы включаете блок «finally», «else» выполняется после «try» и перед «finally».

Содержание

Примеры с конструкцией try…except…else

Давайте рассмотрим несколько примеров использования оператора try…except…else.

1) Использование try…except…else для управления потоком

В следующем примере показано, как использовать try…except…else для разработки программы, вычисляющей индекс массы тела (ИМТ).

Сначала определите функцию для расчета ИМТ на основе роста и веса:

def calculate_bmi(height, weight):
    """ calculate body mass index(BMI) """
    return weight / height**2

Во-вторых, определите еще одну функцию для оценки ИМТ:

def evaluate_bmi(bmi):
    """ evaluate the bmi """
    if 18.5 <= bmi <= 24.9:
        return 'healthy'

    if bmi >= 25:
        return 'overweight'

    return 'underweight'

В-третьих, определите новую функцию main(), которая запрашивает у пользователей ввод роста и веса и распечатывает результат ИМТ:

def main():
    try:
        height = float(input('Enter your height(meters):'))
        weight = float(input('Enter your weight(kilograms):'))

    except ValueError as error:
        print('Error! please enter a valid number.')
    else:
        bmi = round(calculate_bmi(height, weight), 1)
        evaluation = evaluate_bmi(bmi)

        print(f'Your body mass index is {bmi}')
        print(f'This is considered {evaluation}!')

Функция main() использует оператор try…except…else для управления своим потоком. Если вы введете рост и вес, которые невозможно преобразовать в числа, возникнет исключение ValueError.

Если исключения не возникает, будет выполнено условие else. Оно рассчитывает индекс ИМТ и отображает оценку.

Соединим все это вместе.

def calculate_bmi(height, weight):
    """ calculate body mass index(BMI) """
    return weight / height**2


def evaluate_bmi(bmi):
    """ evaluate the bmi """
    if 18.5 <= bmi <= 24.9:
        return 'healthy'

    if bmi >= 25:
        return 'overweight'

    return 'underweight'


def main():
    try:
        height = float(input('Enter your height(meters):'))
        weight = float(input('Enter your weight(kilograms):'))

    except ValueError as error:
        print(error)
    else:
        bmi = round(calculate_bmi(height, weight), 1)
        evaluation = evaluate_bmi(bmi)

        print(f'Your body mass index is {bmi}')
        print(f'This is considered {evaluation}!')

main()

2) Использование try…except…else и finally

Условие else выполняется непосредственно перед блоком finally, если в операторе try не возникает исключений.

В следующем примере показано, как использовать конструкцию try…except…else…finally:

fruits = {
    'apple': 10,
    'orange': 20,
    'banana': 30
}

key = None
while True:
    try:
        key = input('Enter a key to lookup:')
        fruit = fruits[key.lower()]
    except KeyError:
        print(f'Error! {key} does not exist.')
    except KeyboardInterrupt:
        break
    else:
        print(fruit)
    finally:
        print('Press Ctrl-C to exit.')

Как это работает.

  • Сначала определите словарь fruits, содержащий три элемента.
  • Во-вторых, используйте цикл while для многократного получения входных данных от пользователей. Он останавливает цикл до тех пор, пока пользователи не нажмут Ctrl-C.
  • В-третьих, используйте конструкцию try…except…else…finally внутри цикла while. Мы используем пользовательский ввод для поиска элемента в словаре.

Если ключ не существует, возникает исключение KeyError, выполняется исключение except.

Если пользователи нажимают клавиши Ctrl-C, возникает исключение KeyboardInterrupt, которое выполняет оператор break для завершения цикла. Если ключ найден в словаре, программа распечатывает найденный элемент.

Конструкция «finally» всегда выполняется. Она является напоминанием пользователям о том, что для выхода им следует нажать Ctrl-C.

Заключение

  • Использование оператора Python try…except…else дает вам возможность контролировать ход выполнения программы в случае возникновения исключений.
  • Условие else выполняется, если в операторе try не возникает исключений.
  • Если да, то else выполняется после try и перед finally.
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *