如何解决在 Python 中关闭文件
我正在使用 Tkinter 在 Spyder 上用 Python 编写代码。你可以在下面看到我的方法之一。不想把我的完整代码,因为它很长。我需要打开一个文件来读取一些信息。我的代码没有问题,它实际上运行得很好(做我想要它做的事情)但我不知道在我完成后如何关闭我的文件。无论我把我的 'myFile.close()' 命令放在哪里,它都会给我另一种类型的错误。我想了解我应该把它放在哪里。由于for和if,我对把它放在哪里有点困惑。你能帮我吗?
*** 编辑 *** 使用下面的 myFile1.close() 命令,它会给出“ValueError: I/O operation on closed file”。错误。
- 我没有在其他地方使用 myFile1。
- 没有另一个 myFile1.close() 命令。
def login(self):
id_val = self.entry_1.get()
pass_val = self.entry_2.get()
myFile1 = open("ids.txt","r")
for line in myFile1:
if line.find(id_val) == 0:
self.pid,password,name,gender,age,phone=line.split(",")
if password == pass_val:
box = Text(width=45,height=40)
box.place(x=1120,y=80)
self.first,self.last=name.split()
box.insert(END,"\n\n\tAd: ")
box.insert(INSERT,self.first)
box.insert(END,"\n\n\tSoyad: ")
box.insert(INSERT,self.last)
box.insert(END,"\n\n\tCinsiyet: ")
box.insert(INSERT,gender)
box.insert(END,"\n\n\tYaş: ")
box.insert(INSERT,age)
box.insert(END,"\n\n\tTelefon: ")
box.insert(INSERT,phone)
self.patient_screen()
myFile1.close()
else:
messagebox.showerror("Warning","Wrong ID or password.")
myFile1.close()
break
else:
messagebox.showerror("Warning","Wrong ID or password.")
myFile1.close()
break
解决方法
这是打开和关闭文件的正确但糟糕的方式:
f = open(filename,...)
# do something with f
f.close()
它有效,但有问题。如果你想在它中间return
,或者break
,或者有异常怎么办?然后你必须这样做:
f = open(filename,...)
# do something with f
if condition:
f.close()
return something
# do something else with f
try:
# do something which may fail
except:
f.close()
raise
if another condition:
f.close()
return something_else
# do more with f
f.close()
这很快就会变得丑陋。为了避免这种情况,最好使用上下文管理器协议使用 with
关键字打开文件,因为这些文件会自动关闭。
同样复杂的例子:
with open(filename,...) as f:
# do something with f
if condition:
return something
# do something else with f
# do something which may fail
if another condition:
return something_else
# do more with f
# here,the file is closed automatically
,
我不熟悉 Spyder 或 Tkinter,但我建议对文件使用 context managers,它确保资源在上下文管理器之后关闭。
def login(self):
id_val = self.entry_1.get()
pass_val = self.entry_2.get()
# myFile1 = open("ids.txt","r")
with open("ids.txt","r") as myFile1 :
for line in myFile1:
if line.find(id_val) == 0:
self.pid,password,name,gender,age,phone=line.split(",")
if password == pass_val:
box = Text(width=45,height=40)
box.place(x=1120,y=80)
self.first,self.last=name.split()
box.insert(END,"\n\n\tAd: ")
box.insert(INSERT,self.first)
box.insert(END,"\n\n\tSoyad: ")
box.insert(INSERT,self.last)
box.insert(END,"\n\n\tCinsiyet: ")
box.insert(INSERT,gender)
box.insert(END,"\n\n\tYaş: ")
box.insert(INSERT,age)
box.insert(END,"\n\n\tTelefon: ")
box.insert(INSERT,phone)
self.patient_screen()
else:
messagebox.showerror("Warning","Wrong ID or password.")
break
else:
messagebox.showerror("Warning","Wrong ID or password.")
break
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。