Мне интересно, каков самый элегантный способ обработки исключений, которые зависят от условного импорта.
Например:
import ldap
try:
...
l = ldap.open(...)
l.simple_bind_s(...)
...
except ldap.INVALID_CREDENTIALS, e:
pass
except ldap.SERVER_DOWN, e:
pass
В реальном сценарии (который заставил меня задуматься об этом), у нас есть сервер cherrypy со страницей входа в систему. И метод входа в систему делает много вещей - один из них - аутентификация.
Однако для аутентификации я могу использовать что-то еще, кроме LDAP, и в этом случае я вообще не хочу импортировать ldap.
Но если я сделаю оператор import ldap условным (например, он импортируется только тогда, когда значение USE_LDAP установлено в True в файле конфигурации), я тоже должен что-то делать с исключением, кроме. Вопрос в том, что?
Перехватите универсальное исключение, используйте оператор if, чтобы проверить, используем ли мы LDAP (т. Е. Импортируем ldap), а затем используем isinstance, чтобы проверить, является ли исключение правильным типом (ldap.INVALID_CREDENTIALS)?
Попытаться сконцентрировать код, который зависит от ldap, в одном месте и повторно вызвать пользовательское исключение, которое, наконец, попадет в метод входа в систему?
Что бы вы назвали самым питоническим?