web-dev-qa-db-fra.com

Python TypeError: chaîne ou tampon attendu

Besoin d'aide pour. Avoir une liste de données nommée arglist, exemple: ['dlink', 'des', '1210', 'c', 24] <- c'est ce que "imprimer" vues.

Et ce 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

Il donne:

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

Qu'est-ce qui ne va pas?

13
Jetpylot

Vous essayez de charger un objet fichier, lorsque json.loads attend une chaîne. Vous pouvez soit utiliser

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

ou bien mieux:

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

Dans le premier exemple, le fichier est ouvert, mais jamais fermé (mauvaise pratique). Dans le deuxième exemple, le gestionnaire de contexte ferme le fichier après avoir quitté le bloc de contexte.

26
Sven Festersen