SyntaxError:无效语法,eval()函数中'='的子句

Con*_*lan 1 python syntax syntax-error python-3.x

我的程序出现以下问题:

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
Run Code Online (Sandbox Code Playgroud)

以下是供参考的代码段:

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+'"');
Run Code Online (Sandbox Code Playgroud)
  • IN[0] - 用于标识该命令指定文件夹的详细信息.*
  • IN[1] - 文件夹中的任务.*
  • IN[2] - 任务的属性(任何类型,文件,数量,计数).*
  • IN[3] - 要将属性设置为的值.

整个代码在这里,遗憾的是没有记录,因为我原本只想要一个简单的CUI设置.但如果您对特定片段有任何疑问,请先测试我.我也有纸质文档,它显示了该程序应该如何工作.

如果您可以建议对CUI如何工作进行一些更改,特别是如果它们会比我现在的头疼更少.(而且我确信我不必使用eval()每一个功能.)

Jér*_*ôme 7

来自邓肯的评论:

eval评估表达式.赋值是一个语句,而不是表达式,所以你不能这样做eval.

您可以使用exec(请参阅此答案以获取有关exec和的说明eval),但严重的是,您无需使用这些代码对代码进行模糊处理.

这是你可以做的:

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)
Run Code Online (Sandbox Code Playgroud)

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

说明:

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

你应该考虑evalexec不得已的事情.您很可能不需要代码中的任何位置.

例如

eval('print(self.'+str(arg)+')')
Run Code Online (Sandbox Code Playgroud)

应该写

print(getattr(self, arg))
Run Code Online (Sandbox Code Playgroud)