4

我有可以将文件作为参数的类,例如:

ParserClass(file('/some/file', 'rb'))

如果我正确理解 Python,一旦对象被垃圾收集,文件将自动关闭。我不明白这到底是什么时候发生的。在如下函数中:

def parse_stuff(filename):
    parser = ParserClasss(file(filename, 'rb'))

    return list(parser.info())

parser对象不应该在函数退出后立即进行 GC,从而导致文件关闭吗?然而,由于某种原因,Python 似乎在函数退出后很久才打开文件。或者至少看起来是这样,因为 Windows 不允许我修改文件,声称 Python 已打开它并迫使我关闭 IDLE。

有没有办法确保文件被关闭,而不是为我创建的每个文件明确要求它?我还想补充一点,这些类是外部的,我不想深入研究它们以找出它们与文件的确切内容。

4

2 回答 2

12

您可以使用该with语句打开文件,这将确保文件已关闭。

with open('/some/file', 'rb') as f:
    parser = ParserClasss(f)
    return list(parser.info())

有关详细信息,请参阅http://www.python.org/dev/peps/pep-0343/ 。

于 2012-10-22T16:03:14.520 回答
6

可以with用来打开文件。当你使用时,当块退出with时文件将被隐式关闭,并且它也会处理异常状态。with

于 2012-10-22T16:03:13.287 回答