我怎么知道哪个函数需要一个封闭的资源操作



我是Python新手,不知道什么时候应该调用close。

例如,考虑csv文档中的这个示例:

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

在这个任务的末尾没有reader.close()。

Q>如何确定函数调用之后是否需要进行close call?

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

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

您给出的示例不需要关闭,因为打开的文件是由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()

最新更新