2015-10-25 115 views
9

需要幫助。 有一個名爲arglist的數據列表,例如: ['dlink','des','1210','c',24] < - 這是什麼「打印」視圖。Python類型錯誤:預期的字符串或緩衝區

而這種代碼:

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 

它提供:

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 

的哪些錯誤?

+1

你正在試圖加載一個文件對象,而不是一個字符串。如果你想使用文件而不是字符串,你應該使用'json.load'和'json.dump'。 – geoffspear

+2

調試的第一條規則是假設錯誤告訴你字面的真相。它期待一個字符串,但你沒有給它一個。所以,開始你的調查,爲什麼你傳遞的東西不是字符串,或者爲什麼你使用的函數需要一個字符串,當你有別的東西。 –

+0

你說得對。非常明顯。感謝幫助。 – Jetpylot

回答

16

當json.loads需要一個字符串時,您正在嘗試加載文件對象。你既可以使用

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

,或者更好:

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

在第一個例子中,文件被打開,但永遠不會關閉(糟糕的做法)。在第二個示例中,上下文管理器在離開上下文塊後關閉文件。

+1

'.read()'在這裏很重要。 'open'內建返回一個文件對象,而不是一個字符串。 – seth10

相關問題