语法错误:语法无效,eval() 函数中的“=”子句

问题描述 投票:0回答:2

我的程序遇到以下问题:

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

python syntax syntax-error eval
2个回答
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)

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

说明:

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

您应该考虑

eval
exec
最后的手段。很可能您的代码中不需要这些。

比如说

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

应该写

print(getattr(self, arg))

1
投票

eval
函数中不允许赋值;尝试使用
exec
代替。

© www.soinside.com 2019 - 2024. All rights reserved.