Ошибка EOF выдается при использовании Kaitai Stuct - PullRequest
0 голосов
/ 20 сентября 2018

Я создаю двоичный парсер с использованием 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 Ответ

0 голосов
/ 27 сентября 2018

Как правило, неожиданный EOFError является признаком того, что с спецификацией формата что-то не так, и синтаксический анализ идет не так.

Код, сгенерированный ksc, на самом деле довольно читабелен, поэтому вы также можете его отладить.Вы можете проверить трассировку стека, предоставляемую EOFError, и посмотреть, где именно это происходит.При необходимости вы можете добавить больше отладочной печати прямо в код синтаксического анализатора, сгенерированный ksc, или запустить его в отладчике и т. Д.

Другой вариант - загрузить .ksy в какой-то визуализатор (например, ).эту командную строку один или этот WebIDE ) и посмотрите, станет ли это яснее, где проблема.

...