保证文件关闭

Baz*_*Baz 5 python

我有一个类,我在构造函数中创建一个文件对象.这个类还实现了finish()方法作为其接口的一部分,在这个方法中我关闭了文件对象.问题是,如果我在此之前得到异常,则不会关闭该文件.有问题的类有许多其他使用文件对象的方法.我是否需要在try finally子句中包含所有这些,还是有更好的方法?

谢谢,

巴里

Bjö*_*lex 11

您可以使您的类成为上下文管理器,然后在with-statement中包装对象创建和使用该类.有关详细信息,请参阅PEP 343.

要使您的类成为上下文管理器,它必须实现方法__enter__()__exit__().__enter__()当你输入with-statement 时调用它,并且__exit__()保证在你离开它时被调用,无论如何.

然后你可以像这样使用你的类:

with MyClass() as foo:
    # use foo here
Run Code Online (Sandbox Code Playgroud)

如果您在构造函数中获取资源,则可以在不执行任何操作的情况下__enter__()返回self.__exit__()应该只是打电话给你的finish()方法.

  • @delnan或者只是在`close`实例方法中调用`file_handle.close()`并使用`contextlib.closing`.(`do`删除) (2认同)