簡體   English   中英

python:“ L”格式代碼的整數超出范圍

[英]python: integer out of range for 'L' format code

在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位。

即使在錯誤行指向該行,錯誤也不位於此處。 在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

問題最有可能是以下其中一項的價值:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM