Обработка исключений. Конструкция try/except/finally

Python предоставляет мощные инструменты для обработки исключений, которые помогают поддерживать работоспособность программы даже при возникновении ошибок. Основными конструкциями для этого являются tryexceptelse, и finally.

Базовая конструкция

Стандартная конструкция try/except выглядит так:

try:
    # код, который может вызвать ошибку

except Ошибка:
    # код, который будет выполняться, если в блоке try возникла ошибка

Пример:

try:
    # Код, который может вызвать исключение
    result = 10 / 0
except ZeroDivisionError:
    # Код, который выполняется при возникновении исключения ZeroDivisionError
    print("На ноль делить нельзя!")

ZeroDivisionError - ошибка, которая, как вы поняли, возникает при делении на ноль. Этих ошибок много, о них я расскажу в следующей статье.

try/except/finally

Блок finally выполняется всегда, независимо от того, возникло исключение или нет

try:
     # блок, который может вызвать ошибку
except Ошибка:
    # код, который будет выполняться, если в блоке try возникла ошибка
finally:
    # выполняется всегда

Пример:

def exception_test(value):
    try:
        result = 10 / value
        print(result)

    except ZeroDivisionError:
        print("На ноль делить нельзя!")

    finally:
        print("Функция все равно выполнилась")


exception_test(10) # 1.0 Функция все равно выполнилась
exception_test(0) # На ноль делить нельзя! Функция все равно выполнилась

try/except/else

А вот блок else выполняется, если код в блоке try не вызвал ошибок:

try:
     # блок, который может вызвать ошибку
except Ошибка:
    # код, который будет выполняться, если в блоке try возникла ошибка
else:
    # выполняется если в блоке try нет ошибок

Пример:

def exception_test(value):
    try:
        result = 10 / value
        print(result)

    except ZeroDivisionError:
        print("На ноль делить нельзя!")

    else:
        print("Ошибок нет")


exception_test(10) # 1.0 Ошибок нет
exception_test(0) # На ноль делить нельзя!

Все вместе

Давайте объединим все варианты воедино

def exception_test(value):
    try:
        result = 10 / value
        print(result)

    except ZeroDivisionError:
        print("На ноль делить нельзя!")

    else:
        print("Ошибок нет.")

    finally:
        print("Функция выполнилась.")


exception_test(10) # 1.0 Ошибок нет. Функция выполнилась.
exception_test(0) # На ноль делить нельзя! Функция выполилась.

Обработка нескольких ошибок

def exception_test(value):
    try:
        result = 10 / value
        print(result)

    except ZeroDivisionError:
        print("На ноль делить нельзя!")

    except TypeError:
        print("Аргумент должен иметь числовой тип")


exception_test(0) # На ноль делить нельзя!
exception_test("a") # Аргумент должен иметь числовой тип

Также можно объединить ошибки вот так:

def exception_test(value):
    try:
        result = 10 / value
        print(result)

    except (ZeroDivisionError, TypeError):
        print("Передано неправильное знаение")


exception_test(0) # Передано неправильное значение
exception_test("a") # Передано неправильное знаение

Еще есть возможность присвоить переменной экземпляр ошибки, чтобы затем ее использовать:

def exception_test(value):
    try:
        result = 10 / value
        print(result)

    except (ZeroDivisionError, TypeError) as error:
        print(f"Передано неправильное значение. Ошибка {error}")



exception_test(0) # Передано неправильное значение. Ошибка division by zero
exception_test("a") # Передано неправильное значение. Ошибка unsupported operand type(s) for /: 'int' and 'str'


ООП. Введение в объектно-ориентированное программирование в Python

Объектно-ориентированное программирование - одна из самых распространенных парадигм. Знание ООП позволит сделать код более гибким и масштабируемым

Модули в языке Python. Разбиение программ на модули. Установка сторонних библиотек

Для написания сложных программ необходимо использовать сторонние библиотеки. Они позволяют использовать готовый функционал. Также можно использовать модули для компоновки вашего приложения.

Pattern matching в Python - конструкция match case

В Python 3.10 был добавлен новый функционал - сопоставление с шаблонами с помощью ключевых слов match и case. В статье также рассматривается производительность match/case по сравнению с if/else.

Классы исключений. Создание собственных исключений

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