Python 即使给出了正确的代码,也会出现eval-giving语法错误
我有以下代码,它使用Python 即使给出了正确的代码,也会出现eval-giving语法错误,python,eval,Python,Eval,我有以下代码,它使用eval功能: lines = self.fulltext.splitlines() CURRENT = 0 extractors = { "solar zenith angle" : (CURRENT, 1, "self.solar_z"), "ground pressure" : (CURRENT, 2, "self.ground_pressure")
eval
功能:
lines = self.fulltext.splitlines()
CURRENT = 0
extractors = { "solar zenith angle" : (CURRENT, 1, "self.solar_z"),
"ground pressure" : (CURRENT, 2, "self.ground_pressure")
}
print locals()
for line in lines:
for label, details in extractors.iteritems():
if label in line:
if details[0] == CURRENT:
values = line.split()
eval("%s = values[%d]" % (details[2], details[1]))
但是,当我运行它时,会出现以下错误:
eval("%s = values[%d]" % (details[2], details[1]))
File "<string>", line 1
self.solar_z = values[1]
^
SyntaxError: invalid syntax
eval(“%s=值[%d]”%(详细信息[2],详细信息[1]))
文件“”,第1行
self.solar_z=值[1]
^
SyntaxError:无效语法
为什么会这样self.solar_z
已定义,且求值语句看起来正确。eval()
对表达式求值。Python中的赋值是一个语句。这将不起作用。相反,它会对语句进行求值,以便
exec“self.solar_z=values[1]”在locals()中,locals()
这是个坏主意。如果需要按字符串存储值,请使用dict
,不要动态创建变量。它至少同样简单,不影响您的范围,不必关联潜在的安全风险,更难破解(例如,它不可能产生语法错误),性能更好,等等-它只是更好,而且是由一个大魔术师说的。(这与函数式编程无关。)@delnan:我之所以使用这样的变量,是因为我希望允许类的用户以class.variable的形式访问变量,而不是必须执行class.dict['variablename']。您可以通过向类添加\uu getattr\uuuu
方法来实现这一点。