我怎么知道关闭资源操作需要遵循哪个函数

时间:2011-10-13 18:34:45

标签: python

我是Python的新手,对于何时应该调用close感到困惑。

例如,请考虑这个example from the csv documentation

import csv
with open('some.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        print row

此任务结束时没有reader.close()。

Q>如何确定函数调用是否需要通过近距离调用?

3 个答案:

答案 0 :(得分:4)

返回需要清理的资源的函数将提供解释该文档的文档。 csv.reader不会打开文件,也不会创建可关闭的资源。 open调用可以,但with语句负责为您关闭它。

答案 1 :(得分:1)

您需要调用close的唯一时间是必须释放系统资源。一般来说,这仅适用于文件句柄。一般对象,例如csv阅读器,不必关闭。

答案 2 :(得分:1)

您提供的示例不需要关闭,因为打开的文件由with处理(类似于C#的using)。

现在,如果你的例子是这样的,那就是close()

import csv
f = open('some.csv', 'rb')
reader = csv.reader(f)
for row in reader:
    print row
f.close()

这两者实际上是相同的,但with在运行期间处理失败以确保文件句柄(f)已关闭。如果此处的openclose之间存在问题,您仍然拥有一个打开的文件资源。

编辑: with与此相同:

import csv
f = open('some.csv', 'rb')
try:
    reader = csv.reader(f)
    for row in reader:
        print row
finally:
    f.close()