python: integer out of range for 'L' format code
Question: In python, the code is the following

    
    
    envimsg = struct.pack("!LHL", 1, 0, int(jsonmsg["flow_id"], 16)) + \
              struct.pack("!HQH", 1, int(flow["src id"],16), 0) + \
              struct.pack("!HQH", 1, int(flow["dst id"],16), int(flow["dst port"],16)) + \
              struct.pack("!H", 0) + \
              struct.pack("!HHHLL", int(jsonmsg["app_src_port"],10), int(jsonmsg["app_dst_port"],10), int(jsonmsg["app_proto"],10), int(jsonmsg["app_src_ip"],10), int(jsonmsg["app_dst_ip"],10))
    

at the line

    
    
    struct.pack("!H", 0) + \
    

I encounter this error:

    
    
      File "./Translate_2503.py", line 205, in lavi2envi
        struct.pack("!H", 0) + \
    struct.error: integer out of range for 'L' format code
    

which is strange because I try to pack in H (unsigned short).

Any clues?

My python version 2.7.3. CPU archi is 32bit.


Answer: Even in the error line is pointing to this line, the error is not located
there. Executing this instruction in the Python interpreter produces no error:

    
    
    import struct
    struct.pack("!H", 0)
    >>> '\x00\x00'
    

This makes sense, as the error is complaining on the 'L' format code, so the
error will be located in the ones which use this format.

Given that 'L' is used for unsigned long, and the message complains on being
out of range, the error is because one (or more) of the variables used are
negative, producing the out of range for unsigned long.

This can be verified in the Python interpreter:

    
    
    import struct
    
    struct.pack("!HHHLL", 1, 2, 3, 4, 5)
    >>> '\x00\x01\x00\x02\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05'
    
    struct.pack("!HHHLL", 1, 2, 3, -4, 5)
    >>> Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    struct.error: integer out of range for 'L' format code
    

