我一直在学习和练习python,在此期间 我在程序中发现了一个错误,但我无法解决。我想返回从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()
错误是
Traceback(最近一次调用最后一次):文件 “C:\ Users \ santo \ workspace \ PyProject \ hello \ FinalChallenge.py”,第36行, 在 main()文件“C:\ Users \ santo \ workspace \ PyProject \ hello \ FinalChallenge.py”,第32行, 在主要 对于fullString中的everyRow:ValueError:关闭文件的I / O操作。
答案 0 :(得分: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')
您还应该阅读pep8这是Python的样式指南;为了理解如何命名变量和函数。
答案 1 :(得分:0)
当您使用shared
时,它会在上下文结束时关闭文件。现在with open
的返回类型为listOfRows
,因此csv.Reader
(不是列表)。您正在尝试迭代它,它似乎迭代已经关闭的文件对象。
答案 2 :(得分:0)
正如JulienD已经指出的那样,当你尝试从中读取行时,文件已被关闭。你可以使用它来消除这个异常,例如:
with open(fileName, READ) as myFile:
listOfRows = csv.reader(myFile)
for row in listOfRows:
yield row
<强>更新强>
顺便说一下,处理异常的方式使得调试非常困难。我建议这样的事情。
except Exception as e:
print('Something went wrong: "%s"' e)
这样您至少可以看到错误消息。