代码之家  ›  专栏  ›  技术社区  ›  Natha

通过exec导入Python不起作用,而硬编码的导入可以工作

  •  0
  • Natha  · 技术社区  · 5 年前

    在函数内部,我必须从模块动态导入变量(dict):

    exec("from ctrl_%s import default_settings" % get_version_id(iid))

    UnboundLocalError: local variable 'default_settings' referenced before assignment

    变量在要导入的模块的全局范围内。

    但是:

    有人知道该怎么做吗?

    1 回复  |  直到 5 年前
        1
  •  2
  •   Dharman vijay    5 年前

    我强烈反对使用 exec 首先,它通常不能执行您想要的操作,特别是当涉及到一些特殊语法时,比如这里。

    但幸运的是有一些诀窍:

    迪克特 或getattr:

    import math 
    
    getattr(math,"sin")                                                                                                                  
    
    math.__dict__['sin']
    
    

    https://docs.python.org/3/library/functions.html#__import_ _

    也可以看看这个问题的一些例子: How to import a module given its name as string?