python - 保证文件关闭

标签 python

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

谢谢,

巴里

最佳答案

您可以使您的类成为上下文管理器,然后将对象创建和该类的使用包装在 with 语句中。参见 PEP 343了解详情。

要使您的类成为上下文管理器,它必须实现方法 __enter__()__exit__()__enter__() 在您进入 with 语句时被调用,而 __exit__() 保证在您离开时被调用,无论怎么样。

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

with MyClass() as foo:
    # use foo here

如果您在构造函数中获取资源,您可以使 __enter__() 简单地返回 self 而无需执行任何操作。 __exit__() 应该只调用您的 finish() 方法。

关于python - 保证文件关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7888953/

相关文章:

python - 如何在Jupyter Notebook中建立大数据量的机器学习模型?

python - django 中间件使发布请求为空

python - 在 VS Code (Linux) 中强制执行 PEP-8 linting 和格式化

python - 自动调整 IPython 小部件布局

python - 如何在不破坏遗留代码的情况下增加函数的返回值?

python - MySQL 数据使用谷歌云 SQL 和 SQLAlchemy 进行缓存

python - 使用 NumPy 的 ReLU 导数

python - Flask 网络应用程序(Python 2.7)

python 3 : Write newlines to HTML

python - 如何更改 mako 替换定界符?