← Назад к вопросам
Какой синтаксис у исключений в Python?
2.2 Middle🔥 121 комментариев
#REST API и HTTP
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Синтаксис исключений в Python
Исключения (exceptions) в Python используются для обработки ошибок и исключительных ситуаций. Вот полное описание синтаксиса.
1. Базовый синтаксис try-except
try:
# Код, который может вызвать ошибку
result = 10 / 0
except ZeroDivisionError:
# Обработка конкретного исключения
print('Ошибка: деление на ноль')
2. Множественные исключения
try:
value = int('abc')
result = 10 / 0
except ValueError:
print('Ошибка при преобразовании типа')
except ZeroDivisionError:
print('Деление на ноль')
except Exception as e:
print(f'Неизвестная ошибка: {e}')
3. Обработка нескольких исключений в одном блоке
try:
value = int('abc')
except (ValueError, TypeError) as error:
print(f'Ошибка: {error}')
4. Блок else
Выполняется, если исключения не возникли:
try:
result = 10 / 2
except ZeroDivisionError:
print('Ошибка')
else:
print(f'Результат: {result}') # Выведет: Результат: 5.0
5. Блок finally
Выполняется всегда, независимо от того, было ли исключение:
try:
file = open('data.txt')
data = file.read()
except FileNotFoundError:
print('Файл не найден')
finally:
file.close() # Закроется в любом случае
Лучший способ — контекстный менеджер:
try:
with open('data.txt') as file:
data = file.read()
except FileNotFoundError:
print('Файл не найден')
6. Возбуждение исключений (raise)
def validate_age(age):
if age < 0:
raise ValueError('Возраст не может быть отрицательным')
return age
try:
validate_age(-5)
except ValueError as e:
print(f'Ошибка: {e}')
7. Переиспользование исключения
try:
result = 10 / 0
except ZeroDivisionError as e:
print('Ошибка обработана')
raise # Пробросить исключение дальше
8. Цепочка исключений (Exception Chaining)
try:
result = 10 / 0
except ZeroDivisionError as e:
raise RuntimeError('Критическая ошибка') from e
9. Иерархия встроенных исключений
# Главный класс
BaseException
├── SystemExit
├── KeyboardInterrupt
└── Exception # Все остальные исключения наследуют от этого
├── ValueError
├── TypeError
├── KeyError
├── IndexError
├── ZeroDivisionError
└── ... и другие
10. Создание собственных исключений
class CustomError(Exception):
'''Собственное исключение'''
pass
class ValidationError(Exception):
def __init__(self, field, message):
self.field = field
self.message = message
super().__init__(f'{field}: {message}')
try:
raise ValidationError('email', 'Некорректный формат')
except ValidationError as e:
print(f'Ошибка в {e.field}: {e.message}')
11. Context Manager для управления ресурсами
from contextlib import contextmanager
@contextmanager
def manage_resource():
print('Инициализация')
try:
yield 'ресурс'
finally:
print('Очистка')
with manage_resource() as res:
print(f'Используем: {res}')
12. Полный пример с обработкой
def divide(a, b):
try:
if not isinstance(a, (int, float)):
raise TypeError('a должно быть числом')
if not isinstance(b, (int, float)):
raise TypeError('b должно быть числом')
if b == 0:
raise ZeroDivisionError('Делитель не может быть 0')
return a / b
except (TypeError, ZeroDivisionError) as e:
print(f'Ошибка: {e}')
return None
finally:
print('Операция завершена')
print(divide(10, 2)) # Результат: 5.0
print(divide(10, 'a')) # Ошибка: b должно быть числом
Лучшие практики
- Лови конкретные исключения, не всё подряд
- Не игнорируй исключения молча
- Используй finally для очистки ресурсов
- Создавай свои исключения для специфических ошибок
- Логируй ошибки перед обработкой
Итог: Исключения в Python — это мощный механизм для контролируемой обработки ошибок. Синтаксис try-except-else-finally позволяет писать надёжный и предсказуемый код.