【问题标题】:Python 3 automatic conditional import?Python 3 自动条件导入?
【发布时间】:2017-07-23 10:37:31
【问题描述】:

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

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

  • 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_

或者是什么聪明的东西?

【问题讨论】:

  • 如果您担心模块数量过多,您可以通过编程方式调用importlib.import_module() 来自动执行此类任务。对于 2,您将避免使用更多代码。
  • 请注意,使用if 来决定导入哪个模块是完全正常的。看一下官方os module源码。

标签: python import conditional


【解决方案1】:

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

这样你就可以对模块名进行正常的字符串操作了:

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

【讨论】:

    【解决方案2】:

    事实上,我们经常使用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 中依赖外部脚本导入模块是不常见的。

    【讨论】:

      【解决方案3】:

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

      例如

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        • 1970-01-01
        • 2020-02-05
        • 1970-01-01
        • 1970-01-01
        • 2016-02-04
        • 1970-01-01
        相关资源
        最近更新 更多