我正在运行一个websocket python文件。在这种情况下,我使用imp module在一个函数中创建了内置模块,并在另一个函数中使用exec()执行一个字符串函数。 我将这些内置模块用作exec()中的globals参数。 但是当我在string函数中使用这些模块时,它会抛出以下错误
'module' object has no attribute 'pose'
但是,在string函数之外使用这些模块可以很好地工作并返回预期值但是如何在函数内部使用?
这是完整的代码
import imp
import sys
import time
def generate_modules():
destination_module = imp.new_module("destination")
destination_module.destination = imp.new_module("destination")
destination_module.destination.pose = "Hello World"
# Define GUI module
gui_module = imp.new_module("GUI")
gui_module.GUI = imp.new_module("GUI")
gui_module.GUI.robotPose = lambda: "robotPose"
sys.modules["destination"] = destination_module
sys.modules["GUI"] = gui_module
return gui_module,destination_module
#Main function
def process_code():
gui_module,destination_module = generate_modules()
builtin_modules = {"GUI": gui_module,"destination":destination_module,"time": time}
globl = globals()
global_functions = globl.copy()
global_functions.update(builtin_modules)
sequential_code = """from GUI import GUI
from destination import destination
def generatepath():
data = destination.pose
pose = GUI.robotPose()
return data"""
dic = {}
exec(sequential_code,global_functions,dic)
func = dic["generatepath"]
value = func()
return value
process_code()
谢谢,谢谢你的帮助
根据^{} documentation 的规定:
值得注意的是,members of a class scope are not visible inside any nested scope.由
from destination import destination
产生的别名仅在顶部作用域中可见,而在函数内部不可见一个简单的解决方案是省略本地词典:
相关问题 更多 >
编程相关推荐