使用 Kaitai Struct 时出现 EOF 错误

Posted

技术标签:

【中文标题】使用 Kaitai Struct 时出现 EOF 错误【英文标题】:EOF error is given iwhile using Kaitai Stuct 【发布时间】:2018-09-20 09:05:50 【问题描述】:

我正在使用 Python 创建一个二进制解析器

但是,即使数据文件上的字节仍然存在,它也会给出EOF error。 有没有人面临同样的问题?无论如何要克服这个问题?

    from btsv3 import Btsv3
    import os
    import binascii
    import csv

     for root, dirs, files in os.walk("./Perf/BTS/", topdown=False):
          for name in files:
              g = Btsv3.from_file(os.path.join(root, name))
              if g.header.version == 3:
        print(os.path.join(root, name), "Version 3")
        # Header
        print("BTS ID:", g.header.btsid, " | VERSION:", g.header.version, " | TOTAL LENGTH:", g.header.len, "\n")
        # Payload
        print("L3 perf data of BTS")
        print("Payload tag:", g.payload.l3tag)
        print("Payload length:", g.payload.l3len)

【问题讨论】:

【参考方案1】:

通常,意外的 EOFError 表示格式规范有问题,并且解析出错了。

由 ksc 生成的代码实际上是相当可读的,因此您也可以对其进行调试。您可以检查 EOFError 提供的堆栈跟踪,并查看它到底发生在哪里。如果需要,您可以将更多调试打印直接添加到 ksc 生成的解析器代码中,或在调试器下运行等。

另一种选择是将您的 .ksy 加载到某种可视化工具(即this command-line one 或this WebIDE)中,看看是否会更清楚问题出在哪里。

【讨论】:

以上是关于使用 Kaitai Struct 时出现 EOF 错误的主要内容,如果未能解决你的问题,请参考以下文章

在stm32上使用kaitai struct

Python:使用 Kaitai Struct 读取 ID3v1 标签

更好地理解 Kaitai Struct 的 32 位转换器

为啥使用 readUTF 阅读时出现 EOF 异常?

Rails:创建/更新记录时出现 EOF 错误

在 __repr__() 函数中使用 f 字符串时出现 EOF 错误