2017-02-25 100 views
-1

我與蟒蛇(與語言相當缺乏經驗)和文件I/O,並遇到下列錯誤修補跑:爲什麼python不會寫入這個打開的文件?

ValueError: I/O operation on closed file.

非常簡單,所以我在打印語句來檢查的下降的outfile狀態,看看發生了什麼事情與我的代碼:

import json 

data = {'thing1' : 'foo', 'thing2' : 'bar'} 

def writeToJSON(): 
    with open('data.json', 'w') as outfile: 
     print outfile.closed # outputs 'False', as expected 
     jsonifiedData = json.dumps(data, indent=4, sort_keys=True, separators=(',', ':'), ensure_ascii=False) 
     outfile.write(unicode(jsonifiedData)) # trace identifies this line as the issue 

writeToJSON() 

縮進看起來乾淨,所以這是怎麼回事嗎?

該文件在運行時顯示爲打開,但解釋器立即抱怨在傳送儘可能多的信息後寫入該文件。

謝謝!

編輯:

添加整個文件。

此外,這是運行blurp.py時的完整輸出:

False 
Traceback (most recent call last): 
File "blurp.py", line 11, in <module> 
    writeToJSON() 
File "blurp.py", line 9, in writeToJSON 
    outfile.write(unicode(jsonifiedData)) 
ValueError: I/O operation on closed file 
+3

你能顯示回溯錯誤嗎? –

+1

在我的Linux上檢查了這個,看起來一切正常。 – wanderlust

+0

@wanderlust,hm ...我在macOS上,python 2.7.13,也許這是一個系統的東西......我也會在我的linux機器上試試這個。 – nrebhun

回答

0

@ rlee827敏銳地和正確地提出了whitespacing問題的可能性。導致違規角色的空白由兩個製表符和四個空格組成,這在我的編輯器中是不可見的。用一個標籤替換四個空格解決了這個問題。

感謝大家的支持,並感謝@ rlee827解決此問題!

0

不知道什麼是你身邊的問題,但我試過同一段代碼(蟒蛇3.5),它的工作。

>>> import json 
>>> data = {'thing1' : 'foo', 'thing2' : 'bar'} 
>>> def writeToJSON(): 
     with open('data.json', 'w') as outfile: 
      print (outfile.closed) 
      jsonifiedData = json.dumps(data, indent=4, sort_keys=True, separators=(',', ':'), ensure_ascii=False) 
      outfile.write(str(jsonifiedData)) 
>>> writeToJSON() 
False 
>>> 

和內容data.json的是

{ 
    "thing1":"foo", 
    "thing2":"bar" 
} 
+0

我很感激你爲我嘗試了這一點。 看起來像@ rlee827是在正確的軌道與whitespacing問題。 – nrebhun

相關問題