对象没有被外循环定义在Python
问题描述:
import json
xyz={"john": """{"name": "john","id":"123"}""","tom" : """{"name":"tom","id":"456"}"""}
class abc(object):
def __init__ (self,**d):
self.name=d['name'];
self.id=d['id'];
def main():
ks=xyz.keys()
for j in ks:
lm1="xyz['%s']" %(j)
ds=eval(lm1);
ds1=json.loads(ds)
ln="%s=abc(**ds1)" %(j)
print(ln)
exec(ln);
ln2="%s.name" %(j)
print(eval(ln2));
print(john.name)
print(tom.id)
if __name__ == "__main__":
main();
tom=abc(**ds1)
tom
john=abc(**ds1)
john
Traceback (most recent call last):
File "new6.py", line 26, in <module>
main();
File "new6.py", line 22, in main
print(john.name)
NameError: name 'john' is not defined
为什么我不能够访问“tom.name”主“ john.name”()块? 我在哪里做错了?以及如何以更简单的方式完成? (我实际上有一个json文件,不打扰太多关于“xyz”)
答
这个程序的行为在Python2。*和Python3 *之间是不同的。
1.)xyz.keys()
在Python2.7中给出了list
,但是需要在Python3.6中从dict_keys
类转换为list
类。
2.)有关更多详细信息,Python2。*和Python3。* See here的exec
的行为有所不同。因此,如果您使用Python3运行程序,则尚未定义john
和tom
,并且在尝试访问它们时出现错误。
+0
谢谢,这有帮助。 –
@khelwood错误地提出了问题......它是我的第一次 –
对我而言,程序正常工作。没有NameError,如果我运行它。 – Humbalan
可能是因为,你可能在python2。*中运行它,我希望它在3. * –