蟒:整数超出范围为“L”的格式码(python: integer out of range for

2019-10-17 03:16发布

在Python,代码是下面的

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))

在该行

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

我遇到这样的错误:

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

这很奇怪,因为我尝试在H至包(无符号短)。

任何线索?

我的Python版本2.7.3。 CPU阿尔基是32位。

Answer 1:

最有可能的问题是其中的一个值:

jsonmsg["flow_id"]
jsonmsg["app_src_ip"]
jsonmsg["app_dst_ip"]


Answer 2:

即使在错误行指向这一行,不位于的错误。 在执行Python解释该指令不会产生错误:

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

这是有道理的,因为错误是抱怨的“L”格式代码,所以错误将设在使用这种格式的人。

鉴于“L”被用于无符号长,以及在范围之外的消息抱怨,误差是由于所使用的变量中的一个(或更多)为负,产生超出范围为无符号长。

这可以在Python解释器进行验证:

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


文章来源: python: integer out of range for 'L' format code