2017-10-12 83 views
-1
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. * –

回答

1

這個程序的行爲在Python2。*和Python3 *之間是不同的。

1.)xyz.keys()在Python2.7中給出了list,但是需要在Python3.6中從dict_keys類轉換爲list類。

2.)有關更多詳細信息,Python2。*和Python3。* See hereexec的行爲有所不同。因此,如果您使用Python3運行程序,則尚未定義johntom,並且在嘗試訪問它們時出現錯誤。

+0

謝謝,這有幫助。 –