在我的模块中,一个块的编码如下:
# open a text file to which results obtained in MAINBLOCK will be written
write2file = open('myResults.txt','w')
# MAINBLOCK
write2file.close()
运行模块时,我可能会在IDLE
中用Ctrl+C
中断模块以进行程序调试,或者可能在MAINBLOCK
中引发异常,因此模块会异常停止。但是,如果我当时尝试在Windows资源管理器中删除myResults.txt
,则会显示消息:
The action can't be completed because the file is open in pythonw.exe
我认为如果模块异常停止,文件仍在打开,对不对?如何以IDLE
或其他方式关闭所有这些打开的文件标识符?
答案 0 :(得分:2)
使用with
statement确保即使发生异常也关闭所有文件:
with open("myResults.txt", "w") as write2file:
# do stuff
无需关闭文件 - 只要程序退出with
块,它就会自动关闭。
答案 1 :(得分:0)
作为最后的选择,我相信可以总是从Python shell窗口的提示符处关闭文件:-
file_name.close()
每当程序由于异常而中止执行时,这对我来说都是有效的。但是,如果有一个“全部捕获”关闭方法可以关闭所有打开的文件,这将非常有用。