Короткий вопрос: у меня есть модуль с объектами. Как я могу это сделать, если кто-то импортирует объект из моего модуля, сгенерирует указанное мной исключение?
Что я хочу сделать: я пишу архитектурную среду (для работы как в Python 2, так и в 3). Класс для вывода зависит от jinja2
внешней библиотеки. Я хочу, чтобы фреймворк можно было использовать и без этой зависимости. В пакете __init__.py
я пишу условный импорт моего класса RenderLaTeX
(если jinja2 доступен, класс импортируется, в противном случае нет).
Проблема с этим подходом состоит в том, что у меня есть некоторый код, который использует этот класс RenderLaTeX
, но когда я запускаю его на настройке fre sh, я получаю сообщение об ошибке типа Import error: no class RenderLaTeX could be imported from output
. Эта ошибка довольно неожиданная и непонятная, прежде чем я вспоминаю, что jinja2
должен быть установлен заранее.
Я думал об этом решении: если класс недоступен, __init__.py
может создать строку с этим именем. Если пользователь попытается создать экземпляр этого объекта с помощью обычного конструктора класса, он получит более значимую ошибку. К сожалению, простой импорт
from output import RenderLaTeX
не вызовет ошибку в этом случае.
Что бы вы предложили, надеюсь, с описанием преимуществ и недостатков?