Python 3自动条件导入?

时间:2017-03-03 10:47:22

标签: python import conditional

有没有什么好方法可以根据某些变量值导入不同的模块? 我的例子:

我有一个包含不同模块的文件夹:

  • module_a.py
  • module_b.py

在其他一些python文件中,我想根据一些配置值导入module_a或module_b:

if configVal == 'a':
    import module_a
elif configVal == 'b':
    import module_b

有没有办法避免使用if-elifs?所以不知何故自动?

像:

@conditionalImport(configVal)
import module_

还是聪明的东西?

3 个答案:

答案 0 :(得分:1)

事实上,我们经常使用if elsetry catch语句编写兼容Python2 / 3的代码或避免使用import errors。这很常见。

if sys.version_info[0] > 2:
    xrange = range

或使用try catch引发异常。在重命名的模块之后,您可以将它们作为新名称导入。

try:
    import mod
except ImportError:
    import somemodule as mod

但是使用外部脚本使脚本正常工作是不好的做法。依靠外部脚本在Python中导入模块是不常见的。

答案 1 :(得分:1)

您可以使用__import__内置函数将模块名称声明为字符串。

通过这种方式,您可以对模块名称执行常规字符串操作:

module = __import__("module_{}".format(configVal))

答案 2 :(得分:0)

使用if / try是正常的,除了import

例如

import sys
if sys.version_info > (2, 7):
    import simplejson as json
else:
    import json