Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 即使给出了正确的代码,也会出现eval-giving语法错误_Python_Eval - Fatal编程技术网

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
方法来实现这一点。