对象没有被外循环定义在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(); 

,误差对象没有被外循环定义在Python

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”)

+0

@khelwood错误地提出了问题......它是我的第一次 –

+0

对我而言,程序正常工作。没有NameError,如果我运行它。 – Humbalan

+0

可能是因为,你可能在python2。*中运行它,我希望它在3. * –

这个程序的行为在Python2。*和Python3 *之间是不同的。

1.)xyz.keys()在Python2.7中给出了list,但是需要在Python3.6中从dict_keys类转换为list类。

2.)有关更多详细信息,Python2。*和Python3。* See hereexec的行为有所不同。因此,如果您使用Python3运行程序,则尚未定义johntom,并且在尝试访问它们时出现错误。

+0

谢谢,这有帮助。 –