我在python解释器中执行以下操作,并且可以正常工作:
rhce=rhcsa=0
args=['rhce','rhcsa']
for cert in args:
exec(cert+'+=1')
print(eval(cert))
>>> 1
>>> 1
如您所见,无论您使用print(rhce)还是print(eval(cert)),变量都是递增的。但是,当我将完全相同的代码片段放入类函数中时,它不再起作用。没有抛出异常,但是变量从不递增。就像exec无法正常工作:
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
我在这里想念什么?
问题来源:stackoverflow
评估或执行代码从来都不是一个好主意,百分之九十九的方法是更好的方法。在这种情况下,除非您有其他确实需要使用eval和exec的原因,否则可以通过dict来实现您的尝试。它可以非常安全地保存用于引用或查找您的值的键(“名称”)。
class MyClass:
def __init__(self):
self.my_counts = {
'rhce': 0,
'rhcsa': 0
}
def add_cert_user(self, userid, args):
print("start of function", self.my_counts)
for cert in args:
if cert in self.my_counts:
self.my_counts[cert] += 1
print("end of function", self.my_counts)
me = MyClass()
args = ['rhce','rhcsa']
me.add_cert_user("test", args)
me.add_cert_user("test", args)
me.add_cert_user("test", args)
输出
start of function {'rhce': 0, 'rhcsa': 0}
end of function {'rhce': 1, 'rhcsa': 1}
start of function {'rhce': 1, 'rhcsa': 1}
end of function {'rhce': 2, 'rhcsa': 2}
start of function {'rhce': 2, 'rhcsa': 2}
end of function {'rhce': 3, 'rhcsa': 3}
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。