2015-10-25 14 views
9

Brauchen Sie Hilfe. Haben Sie eine Liste von Daten mit dem Namen arglist, Beispiel: ['dlink', 'des', '1210', 'c', 24] < - das was "drucken" Ansichten.Python TypeError: erwartete Zeichenfolge oder Puffer

Und dieser Code:

sw_info ={"Brand":arglist[0], 
     "Model":arglist[1], 
     "Hardware":arglist[2], 
     "Software":arglist[3], 
     "Portsnum":arglist[4]} 


print json.dumps(sw_info, open("test", "w")) 
z = json.loads(open("test", "r")) 
print s 

Es gibt:

Traceback (most recent call last): 
    File "parsetest.py", line 34, in <module> 
    z = json.loads(open("test", "r")) 
    File "/usr/lib64/python2.6/site-packages/simplejson/__init__.py", line 307, in loads 
    return _default_decoder.decode(s) 
    File "/usr/lib64/python2.6/site-packages/simplejson/decoder.py", line 335, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
TypeError: expected string or buffer 

Was ist falsch?

+1

Sie versuchen, ein Dateiobjekt zu laden, keine Zeichenfolge. Sie sollten 'json.load' und' json.dump' nur verwenden, wenn Sie mit Dateien statt Strings arbeiten wollen. – geoffspear

+2

Die erste Regel des Debuggens ist die Annahme, dass der Fehler die wörtliche Wahrheit sagt. Es erwartet eine Saite, aber du gibst sie nicht. Beginnen Sie also mit der Untersuchung, warum Sie etwas übergeben, das keine Zeichenkette ist, oder warum Sie eine Funktion verwenden, die eine Zeichenkette benötigt, wenn Sie etwas anderes haben. –

+0

Sie haben Recht. So offensichtlich. Danke für die Hilfe. – Jetpylot

Antwort

16

Sie versuchen, ein Dateiobjekt zu laden, wenn json.loads einen String erwartet. Sie entweder

z = json.loads(open("test", "r").read()) 

oder, viel besser nutzen könnten:

with open("test") as f: 
    z = json.load(f) 

Im ersten Beispiel wird die Datei geöffnet, aber nie (schlechte Praxis) geschlossen. Im zweiten Beispiel schließt der Kontextmanager die Datei, nachdem er den Kontextblock verlassen hat.

+1

'.read()' ist hier wichtig. Das 'open'-built-in gibt ein Dateiobjekt und keine Zeichenfolge zurück. – seth10

Verwandte Themen