Что такое конструкция 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
- 1) Использование try…except…else для управления потоком
- 2) Использование try…except…else и 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.