[New-bugs-announce] [issue30017] zlib
Jeremy Heiner
report at bugs.python.org
Fri Apr 7 10:21:06 EDT 2017
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 <report at bugs.python.org>
<http://bugs.python.org/issue30017>
_______________________________________
More information about the New-bugs-announce
mailing list