Skip to main content
 首页 » 编程设计

python之eval() 函数中 '=' 上的 SyntaxError : invalid syntax, 子句

2025年05月04日14jirigala

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

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()。)

请您参考如下方法:

来自邓肯的评论:

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

您可以使用 exec(有关 exec 和 eval 的说明,请参阅 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。
  • setattr 将 self.details[0] 的属性 'file' 设置为 'image'<

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

例如

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

应该这样写

print(getattr(self, arg))