如何通过另一个文件中定义的变量在文件中使用包含 eval 的函数?

How to use a function containing eval in a file by variable defined at another file from that another file?

假设,我创建了一个 python 文件 (FirstFile.py) 名称,其中包含许多函数和其他内容。其中一个函数是这样的(当然是简化版):

def func(string):
    assert eval(string)

此外,我创建了一个 python 文件,它从上述文件中导入 func() 。然后第二个 python 文件尝试执行以下过程:

from FirstFile import func
amk = 1
func("amk == 1")

当变量"amk"在第一个文件中时,没有问题显示。但是,当变量 "amk" 位于第二个文件中时,如此处所示,错误显示:

NameError: name 'amk' is not defined 

你愿意帮我解决这个问题吗?

默认情况下 eval 在当前 local/global 范围内执行,如果你想指定一个不同的环境,你可以这样做:

eval("x == 1", {"x":1})

因此您的函数可以采用可选的 environ 参数:

def func(string, environ=None):
    assert eval(string, environ)

然后您可以从传递 locals() 作为环境的其他模块调用该函数:

from FirstFile import func
amk = 1
func("amk == 1", locals())

作为旁注,我建议不要评估任意代码,尤其是当它来自另一个源/模块时,因为它可能意外包含有害代码。