我的程序遇到以下问题:
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
来完成它。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))
eval
函数中不允许赋值;尝试使用 exec
代替。