Import Lib 不适用于 exec 函数?
Import Lib not working with exec function?
我已经编写了以下代码字符串并尝试通过 exec
方法执行它。当我 运行 仅使用全局模式时,这段代码 运行 没问题。
codeRule = """import math
def fun (n):
data = n
data = data * math.pi
print(data)
return data
dd = fun(n)"""
codeObejct = compile(codeRule, 'sumstring', 'exec')
exec(codeObejct, dict(n = 10))
但是我的用例需要 exec
之外的 dd
值,所以我使用下面的参数在另一个数据帧中获取 dd
值。
loc = {}
exec(codeObejct, dict(n = 10), loc)
dd = loc["dd"]
但是一旦我使用本地,它就开始给我一个关于库导入的错误,例如
File "<stdin>", line 1, in <module>
File "sumstring", line 7, in <module>
File "sumstring", line 4, in fun
NameError: name 'math' is not defined
有人可以帮忙解决这个问题吗?
我已经检查了以下问题的答案,但我不知道如何将其适合我的用例。
Why doesn't an import in an exec in a function work?
终于找到解决办法了,
exec
我少了一分。以下是我得到的解决方案,我希望它适用于我的实际用例
codeRule = """import math
def fun (n):
data = n
data = data * math.pi
return data
"""
#export Function
exec (codeRule, globals())
dd = fun(10)
dd
31.41592653589793
你的 看起来不错。如果您的用例需要回退,这是另一种更复杂的方法:
codeRule = """\
import math
def fun(n):
data = n
data = data * math.pi
return data
loc['dd'] = fun(n)
"""
codeObject = compile(codeRule, 'sumstring', 'exec')
loc = {}
exec(codeObject, dict(n=10, loc=loc))
print(f"{loc['dd']=}") # -> loc['dd']=31.41592653589793
我已经编写了以下代码字符串并尝试通过 exec
方法执行它。当我 运行 仅使用全局模式时,这段代码 运行 没问题。
codeRule = """import math
def fun (n):
data = n
data = data * math.pi
print(data)
return data
dd = fun(n)"""
codeObejct = compile(codeRule, 'sumstring', 'exec')
exec(codeObejct, dict(n = 10))
但是我的用例需要 exec
之外的 dd
值,所以我使用下面的参数在另一个数据帧中获取 dd
值。
loc = {}
exec(codeObejct, dict(n = 10), loc)
dd = loc["dd"]
但是一旦我使用本地,它就开始给我一个关于库导入的错误,例如
File "<stdin>", line 1, in <module>
File "sumstring", line 7, in <module>
File "sumstring", line 4, in fun
NameError: name 'math' is not defined
有人可以帮忙解决这个问题吗?
我已经检查了以下问题的答案,但我不知道如何将其适合我的用例。
Why doesn't an import in an exec in a function work?
终于找到解决办法了,
exec
我少了一分。以下是我得到的解决方案,我希望它适用于我的实际用例
codeRule = """import math
def fun (n):
data = n
data = data * math.pi
return data
"""
#export Function
exec (codeRule, globals())
dd = fun(10)
dd
31.41592653589793
你的
codeRule = """\
import math
def fun(n):
data = n
data = data * math.pi
return data
loc['dd'] = fun(n)
"""
codeObject = compile(codeRule, 'sumstring', 'exec')
loc = {}
exec(codeObject, dict(n=10, loc=loc))
print(f"{loc['dd']=}") # -> loc['dd']=31.41592653589793