struct.error:unpack_from需要至少4个字节的缓冲区

时间:2019-11-05 13:27:12

标签: python

我是Flatbuffers的新手,它提高了我对Python的了解,因此如果我忽略了一些简单的内容,请原谅我。

我正在尝试使示例Monster应用程序在Python上运行,但收到​​以下错误: struct.error:unpack_from需要至少4个字节的缓冲区

我正在使用教程中的文件,使用flatc生成代码并读取Monster数据文件。当我尝试使用“ monster.Mana()”访问数据时,会向我显示错误消息。

这是我正在使用的代码,这不能再简单了。 我已经尝试了两个版本2.7和3.6的代码,并得到了相同的错误:-(

import MyGame  # refers to generated code
import MyGame.Example  as example
import MyGame.Example.Color  # refers to generated code
import MyGame.Example.Monster  # refers to generated code
import MyGame.Example.Weapon  # refers to generated code
import MyGame.Example.Vec3  # refers to generated code

buf = open('monsterdata.json', 'rb').read()
buf = bytearray(buf)
monster = MyGame.Example.Monster.Monster.GetRootAsMonster(buf, 0)

mana = monster.Mana()

import MyGame # refers to generated code import MyGame.Example as example import MyGame.Example.Color # refers to generated code import MyGame.Example.Monster # refers to generated code import MyGame.Example.Weapon # refers to generated code import MyGame.Example.Vec3 # refers to generated code buf = open('monsterdata.json', 'rb').read() buf = bytearray(buf) monster = MyGame.Example.Monster.Monster.GetRootAsMonster(buf, 0) mana = monster.Mana()

错误消息:

文件“ /project/sample/MyGame/Example/Monster.py”,第34行,在Mana中     o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))   文件“ /home/colin/.local/lib/python3.6/site-packages/flatbuffers/table.py”,第37行,偏移     vtable = self.Pos-self.Get(N.SOffsetTFlags,self.Pos)   Get中的文件“ /home/colin/.local/lib/python3.6/site-packages/flatbuffers/table.py”,第93行     返回flags.py_type(encode.Get(flags.packer_type,self.Bytes,关闭))   Get中的文件“ /home/colin/.local/lib/python3.6/site-packages/flatbuffers/encode.py”,第24行     返回packer_type.unpack_from(memoryview_type(buf),head)[0] struct.error:unpack_from需要至少4个字节的缓冲区

我确定自己做的蠢事,希望能得到一些帮助。

rgds 科林

1 个答案:

答案 0 :(得分:0)

经过一些进一步的测试并退后一步来查看实际的问题是什么,我意识到自己做错了。

我发布的代码是读取json文件并转换为二进制形式,而不是读取使用flatc生成的二进制形式。这当然是行不通的,并导致了错误。纠正代码以读取二进制数据后,所有操作均按预期进行。