Где я могу разместить определения исключений, общие для интерфейса?

Я привыкаю использовать zope.interface при разработке определенных классов, и это хорошо, но я немного не уверен насчет исключений. Я не видел ни одного документа, говорящего о них (хотя только после беглого поиска). Прежде всего, мне интересно, где поставить определенное исключение X, которое является общим для любой реализации интерфейса.

Я всегда мог поместить исключение в свой собственный модуль. Но целый модуль для чего может быть простым исключением? Я не против поставить его в тот же модуль, который определяет рассматриваемый интерфейс, но мне интересно, считается ли это плохой формой так или иначе?

В основном я хотел бы услышать от кого-то, кто немного использовал интерфейсы и знает соглашения для этого.

1 ответ

Решение

Лучшая практика - иметь interfaces модуль, который включает в себя все документированные интерфейсы и соответствующие исключения, константы и события.

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

Вот несколько примеров файлов interface.py из различных проектов:

Другие вопросы по тегам