New submission from Jeremy Heiner: I had some statements inside a `with` statement to write data to an entry in a ZipFile. It worked great. I added a second `with` statement containing almost exactly the same statements. That still worked great.
I refactored those common statements into a function and called that function from the two `with` statements... and got an exception: zlib.error: Error -2 while flushing: inconsistent stream state I can't figure out why it matters whether the writing happens in the `with` or in the function called by the `with`, but here's a trimmed-down version of the code that demonstrates the problem: -------------------------------------------------------------------------------- #!/usr/bin/env python import io, pprint, zipfile from zipfile import ZIP_DEFLATED def printLiteral( data, out ) : encoder = io.TextIOWrapper( out, encoding='utf-8', write_through=True ) pprint.pprint( data, stream=encoder ) data = { 'not' : 'much', 'just' : 'some K \N{RIGHTWARDS WHITE ARROW} V pairs' } with zipfile.ZipFile( 'zzz.zip', mode='w', compression=ZIP_DEFLATED ) as myzip : with myzip.open( 'this one works', 'w' ) as out : encoder = io.TextIOWrapper( out, encoding='utf-8', write_through=True ) pprint.pprint( data, stream=encoder ) with myzip.open( 'this one fails', 'w' ) as out : printLiteral( data, out ) print( 'printed but entry still open' ) print( 'entry has been closed but not file' ) print( 'zip file has been closed' ) -------------------------------------------------------------------------------- And here's the output on my Arch Linux 64bit with package `python 3.6.0-2`... A co-worker sees the same behavior on MacOS 10.11.6 Python 3.6.1 : -------------------------------------------------------------------------------- printed but entry still open Traceback (most recent call last): File "zzz.py", line 21, in <module> print( 'printed but entry still open' ) File "/usr/lib/python3.6/zipfile.py", line 995, in close buf = self._compressor.flush() zlib.error: Error -2 while flushing: inconsistent stream state -------------------------------------------------------------------------------- I tried debugging this in PyDev but got lost. Turning off the compression makes the exception go away. ---------- messages: 291275 nosy: Jeremy Heiner priority: normal severity: normal status: open title: zlib type: behavior versions: Python 3.6 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue30017> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com