Python是否有自动资源管理?

2 投票
2 回答
1478 浏览
提问于 2025-04-16 10:03

所有版本的Java都需要用户手动关闭资源,通常是在finally块中处理的。Java 7即将引入一种叫做ARM(自动资源管理)的新特性。

  1. 首先,我在Python中没有看到finally块的概念。难道你是在每次抛出异常时在catch中关闭资源吗?
  2. Python中有没有库可以实现自动资源管理?如果没有,那么在Python中实现自动资源管理的正确方式是什么?

2 个回答

2

在Python中,有一些自动管理资源的功能。大多数打开资源的对象在被垃圾回收时会自动关闭这些资源。但具体什么时候会发生垃圾回收是不确定的,有时候甚至可能根本不会发生。所以这种方式只适合在你不使用太多资源、也不在乎资源开着多久的情况下使用,反正程序结束时操作系统会帮你关闭这些资源。

如果不是这种情况,建议使用上下文管理器和with语句,像Matthew的回答中提到的那样。

下面是一个简单的例子,演示如何重定向标准输出:

>>> 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
10

在Python中,有一种结构叫做try: except: finally:。

你还可以使用with: 语句,我觉得这正是你想要的,特别是在ARM方面。这些被称为上下文管理器。 http://www.python.org/dev/peps/pep-0343/

撰写回答