2016-09-28 6 views
1

私はPythonを勉強して練習していましたが、その間に 私のプログラムに1つのエラーが見つかりましたが、解決できません。私はcsvファイルから取得されたリストを返す。私は以下のコードを試して、それは私にエラーを返します。ファイルから読み込んだリスト(.csv)を返すことができません

import csv 

def returnTheRowsInTheFile(fileName): 
    READ = 'r' 
    listOfRows = [] 
    try: 
     with open(fileName, READ) as myFile: 
      listOfRows = csv.reader(myFile) 
      return listOfRows 
    except FileNotFoundError: 
     print('The file ' + fileName + ' is not found') 
    except: 
     print('Something went wrong') 
    finally: 
     #myFile.close() 
     print() 

def main(): 
    fullString = returnTheRowsInTheFile('ABBREVATIONS.CSV') 
    for eachRow in fullString: 
     print(eachRow) 
    return 

main() 

そして、あなたはコンテキストが終了するとき、それはファイルを閉じwith openを使用するとエラーが

Traceback (most recent call last): File "C:\Users\santo\workspace\PyProject\hello\FinalChallenge.py", line 36, in main() File "C:\Users\santo\workspace\PyProject\hello\FinalChallenge.py", line 32, in main for eachRow in fullString: ValueError: I/O operation on closed file.

答えて

0

です。今すぐlistOfRowsは返信タイプがcsv.Readerであるため、fullString(リストではありません)です。あなたはそれを反復しようとしています。すでにクローズされているファイルオブジェクトを反復しているようです。

0

JulienDが既に指摘しているように、ファイルの行を読み込もうとすると、そのファイルは閉じています。あなたは、例えば、これを使用して、この例外を取り除くことができます。

with open(fileName, READ) as myFile: 
     listOfRows = csv.reader(myFile) 
     for row in listOfRows: 
      yield row 

UPDATE

ところであなたは例外を処理する方法は、それはかなり難しいデバッグすることができます。私はこのようなことを示唆しています。

except Exception as e: 
    print('Something went wrong: "%s"' e) 

この方法では、少なくともエラーメッセージが表示されます。

1

この問題を解決する簡単な方法は、リストを関数から返すことです。私はlistOfRows = []を割り当てたことを知っていますが、これはlistOfRows = csv.reader(myFile)のときに上書きされました。

ので、簡単な解決策は以下のとおりです。

def returnTheRowsInTheFile(fileName): 
    READ = 'r' 
    try: 
     with open(fileName, READ) as myFile: 
      listOfRows = csv.reader(myFile) 
     return list(listOfRows) # convert to a list 
    except FileNotFoundError: 
     print('The file ' + fileName + ' is not found') 
    except: 
     print('Something went wrong') 

ます。また、Python用のスタイルガイドですpep8をお読みください。あなたの変数と関数に名前を付ける方法を理解するために。

関連する問題