如果它存在,就导入它。
optional_import的Python项目详细描述
用法
此库仅包含上下文管理器optional_import:
>>>fromoptional_importimportoptional_import
成功的导入照常工作:
>>>withoptional_import():...importcollections>>>type(collections)<type'module'>
如果导入不存在,^ {TT1}$将抑制 ImportError否则将被筹集。
>>>importunicornsTraceback(mostrecentcalllast):...ImportError:Nomodulenamedunicorns>>>withoptional_import():...importunicorns>>>unicornsTraceback(mostrecentcalllast):...NameError:name'unicorns'isnotdefined
示例:django本地设置
django中的一个常见模式是将默认设置放在settings.py, 将特定于站点的可选设置放入settings_local.py,然后导入 如果本地设置文件存在,则{TT6}$。
withoptional_import():from.settings_localimport*
为什么不抓住ImportError?
只需捕获ImportError:
try:importfooexceptImportError:pass
但是这个方法引入了一个问题:如果^ {TT9} $存在,但引发 ImportError,我们希望引发该错误,但实际上是 被except子句吞噬。
使用optional_import,将根据需要引发错误。在下面 例如,该模块试图导入一个不存在的包。
>>>withoptional_import():...importbadTraceback(mostrecentcalllast):...ImportError:Nomodulenamedunicorns