我试图让python接受导入'全局'
时遇到了问题在一个模块中,它需要根据另一个变量导入另一个模块,但是如果我在start函数中有它,它似乎不会将它导入到所有模块函数中;例如:
def start():
selected = "web"
exec("from gui import " + selected + " as ui")
log("going to start gui " + selected)
ui.start()
这可行,但在同一个模块中:
def close():
ui.stop()
不起作用。我不知道这里发生了什么
乔
答案 0 :(得分:8)
import gui
ui = None
def start():
selected = "web"
log("going to start gui " + selected)
global ui
__import__("gui.%s" % selected) # if you're importing a submodule that
# may not have been imported yet
ui = getattr(gui, selected)
ui.start()
答案 1 :(得分:2)
你为什么要这样做?为什么不使用内置的__import__
?此外,您对gui
的绑定是函数start
的本地绑定。
答案 2 :(得分:0)
您可以将exec
的范围与in
一起提供。试试这个:
exec("from gui import " + selected + " as ui") in globals()
答案 3 :(得分:0)
您只是将ui模块导入start()函数范围。您应该将模块导入全局范围。为此,您可以在两个函数(启动和关闭)之前导入模块,或者为exec()函数提供全局范围。
示例:为exec方法提供全局范围。
exec("from gui import " + selected + " as ui") in globals()