← Назад к вопросам

Какие блоки для обработки исключений есть в Python?

1.3 Junior🔥 132 комментариев
#Python

Комментарии (2)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Блоки для обработки исключений в Python

Python предоставляет мощный механизм обработки ошибок через блоки try-except-else-finally. Это критически важно для создания устойчивого кода в Data Science приложениях.

Компоненты блока обработки исключений

1. try - Блок кода, который может вызвать исключение

try:
    result = 10 / 0  # Потенциально опасный код

2. except - Обработка конкретных типов исключений

try:
    result = 10 / 0
except ZeroDivisionError:
    print("Ошибка: деление на ноль!")

Можно обрабатывать несколько типов:

try:
    data = [1, 2, 3]
    value = data[5]
except (IndexError, KeyError, TypeError) as e:
    print(f"Ошибка доступа: {e}")
except Exception as e:
    print(f"Неизвестная ошибка: {e}")

3. else - Выполняется если исключений не было

try:
    data = [1, 2, 3]
    value = data[0]
except IndexError:
    print("Элемент не найден")
else:
    print(f"Успешно получено значение: {value}")
    processed = value * 2

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

def read_file(filename):
    f = None
    try:
        f = open(filename, 'r')
        content = f.read()
        return content
    except FileNotFoundError:
        print("Файл не найден")
    finally:
        if f:
            f.close()  # Гарантированно закроется файл
        print("Ресурс освобожден")

Context Manager (with statement)

Современный способ автоматического управления ресурсами:

try:
    with open('data.txt', 'r') as f:
        content = f.read()
except FileNotFoundError as e:
    print(f"Ошибка при открытии файла: {e}")

# Несколько контекстов
with open('input.txt') as f_in, open('output.txt', 'w') as f_out:
    f_out.write(f_in.read())

Поднятие исключений (raise)

def validate_age(age):
    if age < 0:
        raise ValueError("Возраст не может быть отрицательным")
    if age > 150:
        raise ValueError("Возраст слишком большой")
    return age

try:
    validate_age(-5)
except ValueError as e:
    print(f"Ошибка валидации: {e}")

Цепочка исключений

try:
    result = some_function()
except SourceError as e:
    raise ProcessingError("Не удалось обработать") from e

Основные встроенные исключения

  • ZeroDivisionError - деление на ноль
  • ValueError - неправильное значение аргумента
  • TypeError - неправильный тип данных
  • KeyError - ключ не найден в словаре
  • IndexError - индекс вне диапазона списка
  • FileNotFoundError - файл не существует
  • ImportError - ошибка при импорте модуля
  • AttributeError - атрибут объекта не найден
  • NameError - переменная не определена
  • RuntimeError - ошибка во время выполнения

Порядок выполнения

  1. try - выполняется первым
  2. except - выполняется если было исключение
  3. else - выполняется если исключений не было
  4. finally - выполняется всегда в конце

Практический пример для Data Science

import logging
import json

logger = logging.getLogger(__name__)

def load_and_process_data(filepath):
    try:
        with open(filepath, 'r') as f:
            data = json.load(f)
    except FileNotFoundError:
        logger.error(f"Файл не найден: {filepath}")
        return None
    except json.JSONDecodeError as e:
        logger.error(f"Ошибка парсинга JSON: {e}")
        return None
    except Exception as e:
        logger.exception(f"Неожиданная ошибка: {e}")
        return None
    else:
        logger.info(f"Загружено {len(data)} записей")
        return data
    finally:
        logger.info("Завершена операция загрузки данных")

Это обеспечивает надежную обработку ошибок и гарантирует очистку ресурсов в любом случае.

Какие блоки для обработки исключений есть в Python? | PrepBro