Skip to content

Commit e23b2d0

Browse files
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.
1 parent 5c01d99 commit e23b2d0

File tree

3 files changed

+22
-13
lines changed

3 files changed

+22
-13
lines changed

Lib/sunau.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -414,14 +414,17 @@ def writeframes(self, data):
414414
self._patchheader()
415415

416416
def close(self):
417-
self._ensure_header_written()
418-
if self._nframeswritten != self._nframes or \
419-
self._datalength != self._datawritten:
420-
self._patchheader()
421-
self._file.flush()
422-
if self._opened and self._file:
423-
self._file.close()
424-
self._file = None
417+
if self._file:
418+
try:
419+
self._ensure_header_written()
420+
if self._nframeswritten != self._nframes or \
421+
self._datalength != self._datawritten:
422+
self._patchheader()
423+
self._file.flush()
424+
if self._opened and self._file:
425+
self._file.close()
426+
finally:
427+
self._file = None
425428

426429
#
427430
# private methods

Lib/wave.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -436,11 +436,13 @@ def writeframes(self, data):
436436

437437
def close(self):
438438
if self._file:
439-
self._ensure_header_written(0)
440-
if self._datalength != self._datawritten:
441-
self._patchheader()
442-
self._file.flush()
443-
self._file = None
439+
try:
440+
self._ensure_header_written(0)
441+
if self._datalength != self._datawritten:
442+
self._patchheader()
443+
self._file.flush()
444+
finally:
445+
self._file = None
444446
if self._i_opened_the_file:
445447
self._i_opened_the_file.close()
446448
self._i_opened_the_file = None

Misc/NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ Core and Builtins
7676
Library
7777
-------
7878

79+
- Issue #18919: If the close() method of a writer in the sunau or wave module
80+
failed, second invocation of close() and destructor no more raise an
81+
exception.
82+
7983
- Issue #19131: The aifc module now correctly reads and writes sampwidth of
8084
compressed streams.
8185

0 commit comments

Comments
 (0)