Где хранить пользовательский набор исключений?

Для использования в классах мне нужен набор исключений, наследую от Exceptions и храню набор исключений в модуле (в заголовке), структурирую примерно так:

class BaseUserError(Exception):
    pass

class AccountError(BaseUserError):
    pass

class DebitError(AccountError):
    pass

class CreitError(AccountError):
    pass

Есть желание перенести их в классы, где используются, как подклассы (для примера class Account, class Client и так далее). Кажется так более правильно. Кто где хранит и почему?


Ответы (1 шт):

Автор решения: Faraday

Всё что вы пишете, из ряда исключения, кастомные сообщения об ошибках, модели реквестов/респонсов вам нужно выносить их в то месте, где они используются, или максимально к нему близко

То есть, вам нет смысла выносить сообщение об ошибке в другую библиотеку, если оно используется только в одном сервисе. Так же вам нет смысла его выносить в отдельный класс, если оно так же используется только в одном сервисе

Когда это нужно делать? Когда у вас различные части программы могут использовать (или быть зависимы) от кастомных блоков.

Для вашего вопроса. Если вы используете исключение только в одном месте, вы можете вынести это в отдельный класс и "положить" его возле места, где это исключение используется

Если вы хотите добавить глобальное исключение, которое сможет использоваться многими классами, вы можете это вынести на уровень библиотеки, где вы его будете использовать

Если уровень глобальности должен быть ещё выше, я бы сделал модуль что-то из рода Common или Abstractions куда бы вынес это исключение, что бы оно было доступно по иерархии для всей программы

→ Ссылка