python有自动资源管理吗?

时间:2011-01-16 09:03:46

标签: java python

所有版本的Java都要求用户手动关闭资源 - 通常在finally块中处理。 Java 7即将获得ARM(自动资源管理)块。

  1. 首先,我没有在python中看到finally块概念。或者,您是否为每个引发的异常关闭了catch中的资源?
  2. 是否有一个在python中执行ARM的库?如果没有,那么做python的pythonic方法是什么?

2 个答案:

答案 0 :(得分:8)

有一个尝试:除了:finally:在python中。

你也可以使用with:语句,我相信你对ARM的态度。这些被称为上下文管理器。 http://www.python.org/dev/peps/pep-0343/

答案 1 :(得分:2)

Python中有一些自动化资源管理。打开资源的大多数对象在收集垃圾时会关闭它们。如果发生这种情况是未定义的,并且它可能根本不会发生,所以这只有在您不使用很多资源时才会起作用,不关心它们是否打开很长时间并且当程序时操作系统将关闭资源退出。

否则,根据Matthews的答案使用上下文管理器和with语句。

以下是重定向stdout的简单示例:

>>> import sys
>>> class redirect_stdout:
...     def __init__(self, target):
...         self.stdout = sys.stdout
...         self.target = target
...
...     def __enter__(self):
...         sys.stdout = self.target
...
...     def __exit__(self, type, value, tb):
...         sys.stdout = self.stdout
...
>>> from StringIO import StringIO
>>> out = StringIO()
>>> with redirect_stdout(out):
...     print 'Test'
...
>>> out.getvalue() == 'Test\n'
True