我有可以将文件作为参数的类,例如:
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。
有没有办法确保文件关闭,没有明确要求我创建的每个文件?我还想补充一点,这些类是外部的,我不想通过它们来深入了解它们与文件的对应关系。
答案 0 :(得分:12)
您可以使用with
语句打开文件,以确保文件已关闭。
with open('/some/file', 'rb') as f:
parser = ParserClasss(f)
return list(parser.info())
有关详细信息,请参阅http://www.python.org/dev/peps/pep-0343/。
答案 1 :(得分:5)
您可以使用with
打开文件。当您使用with
时,退出with
块时将隐式关闭该文件,并且它也将处理异常状态。