在Python中,如果要动态导入模块(例如从字符串名称),可以使用模块importlib
和函数importlib.import_module("foo")
,它实际上给出了相同的结果import foo
(但它是动态的)。
无论如何,在我的程序中,我正在使用一个函数从列表中导入一个模块,所以它看起来像这样:
module_list = ["os"]
def import_module(name):
exec("global {}".format(name))
exec("import {}".format(name))
for item in module_list:
import_module(item)
我没有在网络上的任何其他地方看到过这种类型的解决方案。我问的是,为什么?这是不好的做法,因为我正在使用这个exec()
功能(因为我读过不做无数次)或是因为它只是更令人困惑
编辑:我觉得有必要注意,这不是我上面的确切代码,但它是与这个问题实际相关的部分,而不是让人困惑
发布于 2019-05-24 10:25:54
它显然不会做同样的事情。
首先,该功能不起作用,例如:
>>> def import_module(name):
... exec("global {}".format(name))
... exec("import {}".format(name))
...
>>> import_module('sys')
>>> sys
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'sys' is not defined
那部分可以修复,但更重要的是,如果它有效,它会做什么?
import_module('os;os.system("format g:")')
绝对比任何import
声明都要多......
https://stackoverflow.com/questions/-100005181
复制相似问题