close the file even if an exception occurs #5536

This commit is contained in:
Benjamin Peterson 2009-03-22 17:45:11 +00:00
parent 8ed2520536
commit b364bfe2f4
2 changed files with 42 additions and 35 deletions

View File

@ -233,6 +233,7 @@ def retrieve(self, url, filename=None, reporthook=None, data=None):
except IOError, msg: except IOError, msg:
pass pass
fp = self.open(url, data) fp = self.open(url, data)
try:
headers = fp.info() headers = fp.info()
if filename: if filename:
tfp = open(filename, 'wb') tfp = open(filename, 'wb')
@ -246,6 +247,7 @@ def retrieve(self, url, filename=None, reporthook=None, data=None):
(fd, filename) = tempfile.mkstemp(suffix) (fd, filename) = tempfile.mkstemp(suffix)
self.__tempfiles.append(filename) self.__tempfiles.append(filename)
tfp = os.fdopen(fd, 'wb') tfp = os.fdopen(fd, 'wb')
try:
result = filename, headers result = filename, headers
if self.tempcache is not None: if self.tempcache is not None:
self.tempcache[url] = result self.tempcache[url] = result
@ -266,8 +268,10 @@ def retrieve(self, url, filename=None, reporthook=None, data=None):
blocknum += 1 blocknum += 1
if reporthook: if reporthook:
reporthook(blocknum, bs, size) reporthook(blocknum, bs, size)
fp.close() finally:
tfp.close() tfp.close()
finally:
fp.close()
del fp del fp
del tfp del tfp

View File

@ -188,6 +188,9 @@ Core and Builtins
Library Library
------- -------
- Issue #5536: urllib.urlretrieve makes sure to close the file it's writing to
even if an exception occurs.
- Issue #5381: Added object_pairs_hook to the json module. This allows - Issue #5381: Added object_pairs_hook to the json module. This allows
OrderedDicts to be built by the decoder. OrderedDicts to be built by the decoder.