我写了这段代码,控制台出现了一个错误,我尝试了几种无法修复的方法,你能解释一下我的错误在哪里吗。多谢各位
import os
os.chdir(r"C:\Users\Umer Selmani\Desktop\prog.practice\MP1")
import csv
with open('FoodDB.csv','r') as FDB:
file = csv.reader(FDB)
for line in file:
print(line)
from tkinter import *
class Diet:
def __init__(self):
self.Left = Frame(root,width= 250,height=200,bg='salmon')
self.Left.pack(side=LEFT,pady=5)
self.labelrdL=Label(self.Left, text="Food Menu").grid(row=0)
self.listboxrdL=Listbox(self.Left,width=30).grid(row=1)
for q in file:
self.listboxrdL.insert(END,q)
self.buttonrdL=Button(self.Left, text="Continue",bg="red").grid(row=2)
root = Tk()
diet = Diet() # Create an instance of Diet.
root.mainloop()
这里有一个错误
Traceback (most recent call last):
File "C:/Users/Umer Selmani/.PyCharmEdu2018.2/config/scratches/scratch_3.py", line 26, in <module>
diet = Diet() # Create an instance of Diet.
File "C:/Users/Umer Selmani/.PyCharmEdu2018.2/config/scratches/scratch_3.py", line 21, in __init__
for q in file:
ValueError: I/O operation on closed file.
Process finished with exit code 1
这里有几件事你需要做
您应该遵循PEP8准则来命名变量。在文件开头定义所有导入。最后也是最重要的一点是,在更新列表框时,应该使用
with open
语句。请记住,与open
对应的with open
将在with
语句结束后自动关闭文件此外,此处的这一行
self.listboxrdL = Listbox(self.Left,width=30).grid(row=1)
将阻止您向列表框添加信息通过执行以下操作,确保在新行上使用几何图形管理器以防止出现问题:
代码:
您的“打开”将自动关闭文件。因此,您得到了错误
代替
with open('FoodDB.csv','r') as FDB:
试试FDB = open('FoodDB.csv','r')
完成后不要忘记手动关闭文件
完整解决方案应如下所示:
相关问题 更多 >
编程相关推荐