← Назад к вопросам
Какие блоки для обработки исключений есть в 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 - ошибка во время выполнения
Порядок выполнения
- try - выполняется первым
- except - выполняется если было исключение
- else - выполняется если исключений не было
- 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("Завершена операция загрузки данных")
Это обеспечивает надежную обработку ошибок и гарантирует очистку ресурсов в любом случае.