我的程序出现以下问题:
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()
。)
答案 0 :(得分:7)
来自Duncan的评论:
eval
评估表达式。作业是一种陈述,而不是表达,因此您无法使用eval
。
您可以使用exec
(有关exec
和eval
的说明,请参阅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'
您应该考虑eval
和exec
最后的事情。很可能你在代码中的任何地方都不需要那些。
例如
eval('print(self.'+str(arg)+')')
应该写
print(getattr(self, arg))
答案 1 :(得分:1)
eval
功能不允许分配;请尝试使用exec
。