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+'"');
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))
eval
函数中不允许赋值;尝试改用 exec
。
我的程序遇到了以下问题:
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 witheval
.
您可以使用 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))
eval
函数中不允许赋值;尝试改用 exec
。