Fredrik Lundh wrote: > "Jansson Christer" wrote: > > >>I have discovered that in my Python 2.4.1 installation (on Solaris 8), >>struct.pack handles things in a way that seems inconsistent to me. >> >>I haven't found any comprehensible documentation over known issues with >>Python 2.4.1 so I try this... >> >>Here's the thing: >> >> >>>>>from struct import pack >>>>>pack('B', -1) >> >>Traceback (most recent call last): >> File "<stdin>", line 1, in ? >>struct.error: ubyte format requires 0<=number<=255 >> >>>>>pack('H', -1) >> >>Traceback (most recent call last): >> File "<stdin>", line 1, in ? >>struct.error: short format requires 0<=number<=USHRT_MAX >> >>>>>pack('L', -1) >> >>'\xff\xff\xff\xff' >> >>Shouldn't pack('L', -1) raise an exception like the others, rather than >>behaving like pack('l', -1)? > > > probably; the reason for the old behaviour is probably to simplify for code > that > uses Python int's to represent 32-bit values. (mixing longs and ints used to > be a > lot more difficult than it is today). > > >>Is this fixed in later versions? > > > the "struct" module was rewritten in Python 2.5; the new module issues a > warning, and then appears to *clamp* the value to the allowed range, in- > stead of grabbing the low bits: > > >>>>import struct > > >>>>struct.pack("B", -1) > > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File "C:\Python25\Lib\struct.py", line 63, in pack > return o.pack(*args) > struct.error: ubyte format requires 0 <= number <= 255 > > >>>>struct.pack("H", -1) > > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File "C:\Python25\Lib\struct.py", line 63, in pack > return o.pack(*args) > struct.error: short format requires 0 <= number <= USHRT_MAX > > >>>>struct.pack("I", -1) > > __main__:1: DeprecationWarning: 'I' format requires 0 <= number <= 4294967295 > '\x00\x00\x00\x00' > > >>>>struct.pack("L", -1) > > __main__:1: DeprecationWarning: 'L' format requires 0 <= number <= 4294967295 > '\x00\x00\x00\x00' > > </F> > > >
Ok this implies that somebody is actually thinking about how to handle this, so I guess I won't file a bug report and simply solve my problems without relying on those exceptions... Thank you! -- -- Christer Jansson WiseOne AB +46 708 21 42 84 -- http://mail.python.org/mailman/listinfo/python-list