2017-10-12 1 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(); 

und der Fehler wirdObjekt nicht außerhalb der Schleife in Python definiert ist

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 

warum bin ich nicht in der Lage zu sein für den Zugriff auf "tom.name", "john.name" in main() Block? wo habe ich falsch gemacht? und wie kann es auf viel einfachere Weise gemacht werden? (Ich habe tatsächlich eine JSON-Datei, nicht viel über die "XYZ")

+0

@khelwood Fehler beim Aufstellen der Frage ... es ist mein erstes Mal –

+0

Für mich funktioniert das Programm gut, wie es ist. No NameError wenn ich es ausführe. – Humbalan

+0

Kann sein, weil Sie es in python2. * Laufen lassen, ich will es in 3. * –

Antwort

1

Das Verhalten dieses Programms unterscheidet sich zwischen Python2. * Und Python3 *.

1.) xyz.keys() gibt ein list in python2.7, muss aber von der dict_keys Klasse zu einem list in Python3.6 gegossen werden. Das Verhalten von exec unterscheidet zwischen Python2. * Und Python3. * See here für weitere Details. Aus diesem Grund sind john und tom nicht definiert, wenn Sie Ihr Programm mit Python3 ausführen, und Sie erhalten einen Fehler beim Versuch, auf sie zuzugreifen.

+0

Vielen Dank, das hat geholfen. –

Verwandte Themen