我有可以将文件作为参数的类,例如:
ParserClass(file('/some/file', 'rb'))
Run Code Online (Sandbox Code Playgroud)
如果我正确理解Python,一旦对象被垃圾收集,该文件将自动关闭.我不明白的是当这种情况发生时.在像这样的功能:
def parse_stuff(filename):
parser = ParserClasss(file(filename, 'rb'))
return list(parser.info())
Run Code Online (Sandbox Code Playgroud)
parser在函数退出后,该对象不应该立即被GC'd,导致文件被关闭吗?然而,出于某种原因,Python似乎在函数退出后很长时间才打开文件.或者至少它看起来那样,因为Windows不会让我修改文件,声称Python打开它并迫使我关闭IDLE.
有没有办法确保文件被关闭,没有明确要求我创建的每个文件?我还想补充一点,这些类是外部的,我不想通过它们来深入了解它们与文件的对应关系.
Nat*_*usa 12
您可以使用该with语句打开该文件,这将确保文件已关闭.
with open('/some/file', 'rb') as f:
parser = ParserClasss(f)
return list(parser.info())
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参见http://www.python.org/dev/peps/pep-0343/.
您可以with用来打开文件.使用with时,with退出块时将隐式关闭文件,并且它也将处理异常状态.