当模块异常停止时,关闭python模块中打开的所有文件

时间:2017-11-02 07:38:02

标签: python

在我的模块中,一个块的编码如下:

# 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或其他方式关闭所有这些打开的文件标识符?

2 个答案:

答案 0 :(得分:2)

使用with statement确保即使发生异常也关闭所有文件:

with open("myResults.txt", "w") as write2file:
    # do stuff

无需关闭文件 - 只要程序退出with块,它就会自动关闭。

答案 1 :(得分:0)

作为最后的选择,我相信可以总是从Python shell窗口的提示符处关闭文件:-

  
    
      

file_name.close()

    
  

每当程序由于异常而中止执行时,这对我来说都是有效的。但是,如果有一个“全部捕获”关闭方法可以关闭所有打开的文件,这将非常有用。