--- Lib/xml/etree/ElementTree.py 2010-02-11 10:46:14.566507494 +0100 +++ Lib/xml/etree/ElementTree.py 2009-09-29 10:49:39.000000000 +0200 @@ -575,17 +575,21 @@ # @defreturn Element def parse(self, source, parser=None): - if not hasattr(source, "read"): - source = open(source, "rb") - if not parser: - parser = XMLTreeBuilder() - while 1: - data = source.read(32768) - if not data: - break - parser.feed(data) - self._root = parser.close() - return self._root + try: + if not hasattr(source, "read"): + source = open(source, "rb") + if not parser: + parser = XMLTreeBuilder() + while 1: + data = source.read(32768) + if not data: + break + parser.feed(data) + self._root = parser.close() + return self._root + finally: + if hasattr(source, "read"): + source.close() ## # Creates a tree iterator for the root element. The iterator loops