如何通过另一个文件中定义的变量在文件中使用包含 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())
作为旁注,我建议不要评估任意代码,尤其是当它来自另一个源/模块时,因为它可能意外包含有害代码。
假设,我创建了一个 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())
作为旁注,我建议不要评估任意代码,尤其是当它来自另一个源/模块时,因为它可能意外包含有害代码。