【发布时间】:2020-03-20 04:49:59
【问题描述】:
我在 python 解释器中执行以下操作,它可以工作:
rhce=rhcsa=0
args=['rhce','rhcsa']
for cert in args:
exec(cert+'+=1')
print(eval(cert))
>>> 1
>>> 1
如您所见,无论您使用 print(rhce) 还是 print(eval(cert)),变量都会递增。但是,当我将完全相同的 sn-p 代码放入类函数中时,它不再起作用。不会抛出异常,但变量永远不会增加。这就像执行不工作:
def addCertUser(self,userid,args):
rhcsa=rhce=0
print(args)
try:
for cert in args:
exec(cert+'+=1')
print(eval(cert))
except Exception as e:
print(e)
>>> ['rhce', 'rhcsa']
>>> 0
>>> 0
我在这里错过了什么?
【问题讨论】:
-
为什么需要使用eval?为什么不直接使用 dict 将名称映射到 int 值?
-
您没有展示如何调用该函数。需要提供minimal reproducible example
-
1.我不知道,为什么它不起作用,但使它起作用的方法是将
rhcsa = rhce = 0替换为exec("rhcsa = rhce = 0")2。正如@ChrisDoyle 所提到的,在生产代码中使用 eval 和 exec 确实是一种不好的做法,您可能需要使用以下内容:pastebin.com/PTV5SAbd
标签: python-3.x exec