【问题标题】:Unpack requires a string argument of length 44 python解包需要长度为 44 python 的字符串参数
【发布时间】:2012-12-08 02:11:56
【问题描述】:

我有 while 循环来获取数据包

unpackedData = struct.unpack("!BBHHHBBH4s4sHH4s4s4sHH4s", data[:44])

这行抛出异常

解包需要一个长度为 44 python 的字符串参数

但是在使用调试器后,我注意到它发生在几个循环之后,我认为是因为缓存已满。

有什么办法可以清除 python 缓存或销毁对象或类似的东西?

【问题讨论】:

  • data 在 while 循环中还会发生什么?是不是缩短了? Python 很乐意让你的索引超出范围(在一个切片中):'foo'[:500] 只给你'foo'
  • 你检查过len(data) >= 44吗?请记住len('abc'[:44]) == 3.
  • @zigg -- 这正是我的想法

标签: python tcp garbage-collection ip packet


【解决方案1】:

我最好的猜测是,在您的 while 循环中,您每次将 data 字符串缩短 44 个字符,但是,44 不会均匀地划分您的原始字符串,因此在最后一次迭代中,您会留下一个长度小于 44 个字符的字符串。

python 不会抱怨切片,它只是返回一个小于您预期的字符串。例如:

print len("foo"[:500])  #3
print "foo"[:500]       #foo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    相关资源
    最近更新 更多