15.struct.error: argument for 's' must be a bytes object

【现象】

struct.error: argument for 's' must be a bytes object

【原因】

  • 查看Python的帮助手册可以看到,格式化字符串的值在Python的类型是bytes类型。所以我们在bytes类型前面加上一个b就可以解决这个问题了。

【解决办法】

requestFileData = struct.pack("!H8sb5sb", 1, b"test.jpg", 0, b"octet", 0)

Python 3.0 struct 格式化字符串

在Python 3.0中,格式化字符串的s参数,在Python中的类型是bytes类型。而bytes是3.0中新增的类型之一。


15.struct.error: argument for 's' must be a bytes object_第1张图片
python3.0
  • 表Python3.0给出的表可以看到,c,s,p的Python type都是bytes类型。
  • 所以在使用这些类型的时候,要将需要pack的字符串写成bytes型的。

Python 2.x中可以编译成功

以上的代码我们可以在Python2.x的版本中编译成功

  • 查看Python2.7的帮助文档
  • 可以看到c,s,p这几个在Python 中的类型都是string


    15.struct.error: argument for 's' must be a bytes object_第2张图片
    python2.7

你可能感兴趣的:(15.struct.error: argument for 's' must be a bytes object)