2017-02-25 15 views
-1

私のpython(言語とかなり経験の浅い)とファイルI/O、および以下のエラーに出会っいじりだ:なぜこのオープンファイルにpythonが書き込まれませんか?

ValueError: I/O operation on closed file.

はかなり簡単なので、私がチェックするためのprint文にドロップ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() 

インデントはきれいだが、だから何がここに起こっているの?

ファイルは実行時に開かれているように見えますが、通訳者はそれを伝えた後すぐに前記ファイルへの書き込みについて直ちに不平を言います。

ありがとうございます!

EDIT:

は、ファイル全体を追加しました。

また、これは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

あるwhitespacing問題の可能性を提案しました。問題の文字につながる空白は、2つのタブと4つのスペースで構成されていましたが、これはエディタには表示されませんでした。 4つのスペースを1つのタブに置き換えると、問題が解決されました。

お手伝いをしてくださった皆様、ありがとうございます。これを解決するための@ rlee827に感謝します。

0

わからないが、私は(のpython 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の内容鋭く、正しくrlee827 @

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

私はこれを試していただきありがとうございます。 @ rlee827のように見えるが、ホワイトスペースの問題が正しいトラックにあった。 – nrebhun

関連する問題