SyntaxError:无效语法,' ='在eval()函数中

时间:2017-02-12 15:53:56

标签: python python-3.x syntax syntax-error

我的程序出现以下问题:

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

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

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

2 个答案:

答案 0 :(得分:7)

来自Duncan的评论:

  

eval评估表达式。作业是一种陈述,而不是表达,因此您无法使用eval

您可以使用exec(有关execeval的说明,请参阅this answer),但严重的是,您无需使用这些代码对代码进行模糊处理。 / p>

这是你能做的:

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
  • setattr'file'的属性self.details[0]设置为'image'

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

例如

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

应该写

print(getattr(self, arg))

答案 1 :(得分:1)

eval功能不允许分配;请尝试使用exec