Модель исключений и дизайн API
Python
Senior
Яндекс
Как вы проектируете иерархию пользовательских исключений в библиотеке? Зачем нужен базовый класс исключений и почему нежелательно бросать голый `Exception`?
Ответы
Иерархия исключений
Обычно делают базовый класс исключений библиотеки, наследующийся от `Exception`:
```python
class MyLibError(Exception):
pass
class ConfigError(MyLibError):
pass
class NetworkError(MyLibError):
pass
```
Пользователь может перехватить либо конкретную ошибку, либо всё, что относится к библиотеке: `except MyLibError:`.
Бросать голый `Exception` плохо, потому что:
- сложно отличить ошибки библиотеки от системных;
- пользователь может слишком широко перехватывать исключения и скрывать баги.
Иерархия ошибок — часть публичного контракта API.