SyntaxError: invalid syntax, clause on '=' in eval() function

SyntaxError: invalid syntax, clause on '=' in eval() function

我的程序遇到了以下问题:

File "C:/Users/6ixpage/Documents/SoftwareDevelopment/Python/Programs/CLI/
PrintandCopy/P&C Job System.py", line 75, in set
     eval('self.details['+a+'].'+b+'"'+c+'"');
File "<string>", line 1
     self.details[0].file = "image"
                          ^
SyntaxError: invalid syntax

以下是供参考的代码片段:

IN = ('details','0','file','image')
if IN[0] == 'details':
    a = IN[1]
    b = IN[2]
    c = IN[3]
    print('self.details['+a+'].'+b+' = "'+c+'"');
    eval('self.details['+a+'].'+b+' = "'+c+'"');

整个代码是 here,不幸的是没有记录,因为我最初只想有一个简单的 CUI 设置。但是,如果您对特定片段有任何疑问,请问我。我也有纸质文档,它显示了该程序应该如何工作。

如果您可以建议对 CUI 的工作方式进行一些更改,请提出建议,尤其是如果它们比我目前所遇到的问题引起的麻烦更少。 (而且我确定我不必为每个函数都使用 eval()。)

来自邓肯的评论:

eval evaluates an expression. Assignment is a statement, not an expression so you can't do it with eval.

您可以使用 exec(有关 execeval 的解释请参阅 this answer),但说真的,没有必要用这些来混淆您的代码.

您可以执行以下操作:

inputs = ('details','0','file','image')
if inputs[0] == 'details':
    a = inputs[1]
    b = inputs[2]
    c = inputs[3]
    setattr(self.details[int(a)], b, c)

(注意没有测试。所有输入都被认为是有效的。)

解释:

  • int(a) 将字符串 '0' 转换为整数 0.
  • setattrself.details[0] 的属性 'file' 设置为 'image'

你应该考虑 evalexec 最后的手段。您很可能在代码中的任何地方都不需要这些。

例如

eval('print(self.'+str(arg)+')')

应该写成

print(getattr(self, arg))

eval 函数中不允许赋值;尝试改用 exec