Обработка ошибок импорта при использовании doctest - PullRequest
1 голос
/ 06 апреля 2010

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

Например. Когда я пишу аутентификацию пользователя, это может быть сделано несколькими способами, и один из них - с использованием LDAP. Однако если пользователь не хочет использовать аутентификацию LDAP, он может выбрать другую опцию в файле конфигурации, и в этом случае ему не нужно устанавливать модуль ldap.

Обычно я решаю это следующим образом:

if config.foo: 
   import ldap_auth as auth
elif config.foo2:
   import other_auth as auth
...
auth.do_stuff(...)

и я импортирую модуль ldap только в модуль ldap_auth. Лично я нахожу это довольно хорошим, однако, конечно, doctests вызывает ошибку ImportError при попытке выполнить ldap_auth.

Теперь я знаю, что могу поймать его, попытавшись импортировать модуль ldap в ldap_auth, но это просто немного испортило красивый код (весь смысл выполнения всего процесса импорта ldap_auth как auth избегать ImportErrors).

Есть ли более элегантный способ предотвратить возникновение ImportErrors на doctest при использовании этого "шаблона"?

Приветствия

Tom

1 Ответ

1 голос
/ 06 апреля 2010

Рекомендуемый способ:

try:
    import foo as auth
except ImportError:
    import bar as auth

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

...