首页 > 解决方案 > 具有块自闭功能的python是否已打开资源?

问题描述

我是一个经验丰富的 Java 开发人员,我想知道 python 中的 with 块是否与嵌入的 Java 相同try/catch。在以下示例中,我正在使用 python 和 Java 写入随机文件

import io

with io.open("filename", "w") as file:
   file.write("a test")
   #is file.close() necessary here ?
   #file.close()


File file = new File("test.txt");
try(FileWriter writer = new FileWriter(file)) {
    writer.write("a test");
    // here writer.close() is useless as it is auto closed by the try catch block
} catch(IOException e){
    e.printStackTrace();
}

这两个块的行为完全相同,还是 python 块在程序结束之前不关闭资源?

标签: pythonio

解决方案


是的,在这种特殊情况下,with它的行为类似于 Java 的 try-with-resource 构造。with退出块时关闭文件。

with块的目的更普遍。有关使用上下文管理器的说明,请参见此处。块的确切行为with取决于赋予块的对象的方法__enter__,更常见的是方法。在这种情况下,返回一个对象(或类似的类;它可以变化),并定义一个在调用时关闭自身的方法。__exit__withopenTextIOWrapperTextIOWrapper__exit__


推荐阅读