python - 导入库无法与 exec 函数一起使用?

标签 python compilation exec lib

我编写了以下代码字符串并尝试通过 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"]

但是一旦我使用本地,它就会开始给我一个关于 Lib Import 的错误,例如

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

关于python - 导入库无法与 exec 函数一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69151112/

相关文章:

python - 如何在 Django ModelForm 中过滤 ManyToManyField 选项?

python - 如何使用 scipy.weave 更改 python 代码? (如何用代码做得更快?)

Python将字符串转换为函数并执行

mysql - Ruby 执行 "mysql -u root ... < some.sql"不起作用

go - 为什么我从 golang 错误地运行 python 脚本

python pygame更新文本标签

python - 类型错误 : cannot handle this type -> object when using pandas rolling(). 应用(lambda:)

c++ - cuda和c++问题

java - maven编译时如何使用class文件代替java文件

python - 导出单个 .exe 时,PyInstaller 卡在 "Building PKG ..."上