summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2013-10-12 18:36:10 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2013-10-12 18:36:10 (GMT)
commite23b2d06c765998d457f97356d49e6ad71fd6684 (patch)
tree0db1a671a50ff94a8d7c005f59b72aa2b8545fcf /Lib
parent5c01d99c12876263d8cc700a11cce9ad88994096 (diff)
downloadcpython-e23b2d06c765998d457f97356d49e6ad71fd6684.zip
cpython-e23b2d06c765998d457f97356d49e6ad71fd6684.tar.gz
cpython-e23b2d06c765998d457f97356d49e6ad71fd6684.tar.bz2
Issue #18919: If the close() method of a writer in the sunau or wave module
failed, second invocation of close() and destructor no more raise an exception.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/sunau.py19
-rw-r--r--Lib/wave.py12
2 files changed, 18 insertions, 13 deletions
diff --git a/Lib/sunau.py b/Lib/sunau.py
index 5212370..15f7b03 100644
--- a/Lib/sunau.py
+++ b/Lib/sunau.py
@@ -414,14 +414,17 @@ class Au_write:
self._patchheader()
def close(self):
- self._ensure_header_written()
- if self._nframeswritten != self._nframes or \
- self._datalength != self._datawritten:
- self._patchheader()
- self._file.flush()
- if self._opened and self._file:
- self._file.close()
- self._file = None
+ if self._file:
+ try:
+ self._ensure_header_written()
+ if self._nframeswritten != self._nframes or \
+ self._datalength != self._datawritten:
+ self._patchheader()
+ self._file.flush()
+ if self._opened and self._file:
+ self._file.close()
+ finally:
+ self._file = None
#
# private methods
diff --git a/Lib/wave.py b/Lib/wave.py
index 54f0302..2c386a5 100644
--- a/Lib/wave.py
+++ b/Lib/wave.py
@@ -436,11 +436,13 @@ class Wave_write:
def close(self):
if self._file:
- self._ensure_header_written(0)
- if self._datalength != self._datawritten:
- self._patchheader()
- self._file.flush()
- self._file = None
+ try:
+ self._ensure_header_written(0)
+ if self._datalength != self._datawritten:
+ self._patchheader()
+ self._file.flush()
+ finally:
+ self._file = None
if self._i_opened_the_file:
self._i_opened_the_file.close()
self._i_opened_the_file = None