2010-04-06 62 views
1

处理导入错误,当我使用Python进行编码时,我必须做某些第三方模块。每次使用doctest

例如,当我编写用户认证时,可以通过多种方式完成,其中之一是使用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在尝试执行ldap_auth时会引发ImportError。

现在,我知道我可以通过尝试在ldap_auth中导入ldap模块来捕获它,但这只是有点弄乱了漂亮的代码(做整个“导入ldap_auth作为auth”bussiness的整点避免导入错误)。

有什么更优雅的方式来防止使用这种“模式”时,导致错误提示ImportErrors?

干杯,

汤姆

回答

1

推荐的方法是

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

它避免了竞争条件,我不认为它看起来不好。

+0

嗯,但这不是我的问题的答案.. – 2010-04-06 12:53:58

+0

您的问题是“有没有更优雅的方式...”。恐怕答案可能不是。 – blokeley 2010-04-06 13:46:05