Extracting a short using struct - won't print.

Graham Nicholls graham at rockcons.co.uk
Thu Aug 7 12:11:57 EDT 2003


Graham Nicholls wrote:

> Peter Hansen wrote:
> 
>> Graham Nicholls wrote:
>>> 
>>> Thanks to Richard and Alex, I'm doing this:
>>> 
>>>         seg_stru=">BHH"
>>>         seg_data=self.fhand.read(struct.calcsize(seg_stru))
>>>         data=struct.unpack(seg_stru,seg_data)
>>>         x=seg_data[1]
>>>         y=seg_data[2]
>> 
>> Why are you unpacking the struct if you aren't going to use the
>> unpacked data?
> 
> Err, I'm trying to extract two shorts - the x and y size in pixels of an
> image, which I'll use to scale it to fit another pair of parameters.  What
> makes you think I'm not using the data? Am I not - I thought I was!
> 
> I realise that ">BHH" above ouhjt really to be "xHH" but aside from that,
> I don't understand your point - theres more code after the debug in the
> rel app - returning x and y.
> 
>> 
>>>         if debug:
>>>                 print ("DEBUG: Image [%s] is [%d] by [%d] pixels" %
>>>                 (self.fname,x,y))
>> 
>> Best way to troubleshoot this kind of thing, in my experience,
>> is to insert "import pdb; pdb.set_trace()" into the code just
>> above the failing line, then use the debugger to inspect the
>> values directly just before they are used.  (You need to execute
>> the "r" or "return" command immediately after the debugger is
>> entered... the rest is pretty straightforward to learn.)
>> 
> I'll give that a go, thanks
>> -Peter
> 
OK, the code now looks like this:



        seg_stru=">xHH"
        seg_data=self.fhand.read(struct.calcsize(seg_stru))
        data=struct.unpack(seg_stru,seg_data)
                        
        x=seg_data[1]
        y=seg_data[2]
        import pdb ; pdb.set_trace()
        if debug:
                print ("DEBUG: Image [%s] is [%d] by [%d] pixels" % (self.fname,x,y))
                        return(x,y)

When I run it, I get this:

EBUG: Scaling image file hb.jpg to fit 100 100
DEBUG: Searching hb.jpg for dimensions
DEBUG: found header type e0
DEBUG: found header type db
DEBUG: found header type db
DEBUG: found header type c0
--Return--
> /usr/local/lib/python2.3/pdb.py(972)set_trace()->None
-> Pdb().set_trace()
(Pdb)
(Pdb) r
> /home/graham/work/hsb/pdflive/pdf_merge(427)getsize()
-> if debug:
(Pdb) print x

(Pdb) print y
m
(Pdb)

Which _seems_ to indicate that unpack is not unpacking the shorts as shorts,
but as chars.  Is this right?

Thanks
Graham
-- 
Graham Nicholls
Rock Computer Consultancy





More information about the Python-list mailing list