导入别名在python 3.7中无法使用exec()工作

时间:2018-08-02 16:13:56

标签: python python-3.x python-import

/my/charts/
     |- module/
         |-abc.py
     |- runtest.py
     |- main.py 
     |- sample.py

我正在尝试从 runtest.py 呼叫 main.py 。在这种情况下,我想使用exec:-

导入 abc.py
module_name = 'module.abc'
chart_type = 'abc'
exec('from {} import {} as drawing_class'.format(module_name,chart_type))

当我运行代码时,它没有给出任何错误,但是当我在exec的下一行打印 dir(drawing_class) drawing_class 时,它给出了一个错误。 像 NameError:未定义名称“ drawing_class”

但是当我在sample.py中编写相同的exec代码时,它就可以按预期工作。

为什么此 exec main.py 中不起作用?

1 个答案:

答案 0 :(得分:1)

考虑以下配置,从标准库中导入代码:

module_name = 'logging.config'
chart_type = 'dictConfig'

这在调用时可以正常工作:

import importlib
drawing_class = getattr(importlib.import_module(module_name), chart_type)

...从而完全避免了exec的使用。