我想知道为什么
>>> def func2():
... global time
... import time
...
>>> time
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'time' is not defined
>>> func2()
>>> time
<module 'time' (built-in)>
>>>
有效,但
>>> def func():
... global module
... module="time"
... exec ("global %s" %module)
... exec ("import %s" %module)
...
>>> time
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'time' is not defined
>>> func()
>>> time
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'time' is not defined
不工作,我怎么能让它工作=) 谢谢
答案 0 :(得分:7)
您的每个exec()
调用都发生在单独的命名空间中。放弃这条道路;它只会导致毁灭。
答案 1 :(得分:1)
因为exec
默认使用自己的范围。如果你做exec "global {0}; import {0}".format(module) in globals()
,那么它就可以了。
你不应该这样做,除非你真的需要。
答案 2 :(得分:1)
要导入名称为字符串的模块,请使用
time=__import__('time')
这是你可以使用它的一种方式
usermodulenames = ["foo","bar","baz"]
usermodules = dict((k,__import__(k)) for k in usermodulenames)
答案 3 :(得分:0)
你要做的事情要么非常复杂,要么非常奇怪。这是它的工作原理:
exec ("import %s" % module) in globals()
请描述您要解决的更大问题