Ответ
Блоки try
, except
, else
и finally
в Python используются для обработки исключений, позволяя программе корректно реагировать на ошибки и продолжать выполнение или выполнять очистку ресурсов.
Почему используются: Это позволяет изолировать потенциально проблемный код, перехватывать и обрабатывать конкретные ошибки, а также гарантировать выполнение определённого кода независимо от возникновения исключений.
Описание блоков:
try
: Содержит код, который может вызвать исключение. Если исключение возникает, выполнениеtry
немедленно прекращается, и управление передаётся в соответствующий блокexcept
.except
: Выполняется, если в блокеtry
возникло исключение. Можно указать конкретный тип исключения для перехвата (например,except ZeroDivisionError:
), или перехватить все исключения (except Exception as e:
).else
: Выполняется только в том случае, если код в блокеtry
завершился без каких-либо исключений. Это полезно для кода, который должен выполняться только при успешном исходеtry
.finally
: Выполняется всегда, независимо от того, возникло ли исключение вtry
или нет, и было ли оно перехвачено. Этот блок часто используется для освобождения ресурсов (например, закрытие файлов, сетевых соединений).
Пример:
def divide_numbers(a, b):
try:
result = a / b # Потенциально может вызвать ZeroDivisionError
except ZeroDivisionError:
print("Ошибка: Деление на ноль невозможно.")
return None
except TypeError:
print("Ошибка: Некорректные типы данных для деления.")
return None
else:
print(f"Деление успешно. Результат: {result}")
return result
finally:
print("Блок finally всегда выполняется (очистка ресурсов, если нужно).")
print("--- Пример 1: Успешное выполнение ---")
divide_numbers(10, 2)
print("n--- Пример 2: Деление на ноль ---")
divide_numbers(10, 0)
print("n--- Пример 3: Некорректные типы ---")
divide_numbers(10, "два")
Порядок выполнения:
try
→ нет ошибки →else
→finally
try
→ ошибка →except
→finally
- Если исключение не перехвачено ни одним
except
блоком,finally
всё равно выполнится, а затем исключение будет распространено дальше.