我的程序遇到了以下问题:
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()。)
请您参考如下方法:
来自邓肯的评论:
evalevaluates 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))
