[英]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.