Понимание ошибки синтаксического анализа при чтении файла модели в PySD

Я получаю следующее сообщение об ошибке при попытке прочитать файл модели Vensim (.mdl) с помощью PySD-пакета Python.

Мой код:

import pysd
import os

os.chdir('path/to/model_file')

model = pysd.read_vensim('my_model.mdl')

Ошибка, которую я получаю:

Traceback (most recent call last):
  Python Shell, prompt 13, line 1
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pysd/pysd.py", line 53, in read_vensim
    py_model_file = translate_vensim(mdl_file)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pysd/vensim2py.py", line 673, in translate_vensim
    entry.update(get_equation_components(entry['eqn']))
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pysd/vensim2py.py", line 251, in get_equation_components
    tree = parser.parse(equation_str)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/parsimonious/grammar.py", line 123, in parse
    return self.default_rule.parse(text, pos=pos)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/parsimonious/expressions.py", line 110, in parse
    node = self.match(text, pos=pos)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/parsimonious/expressions.py", line 127, in match
    raise error
parsimonious.exceptions.ParseError: Rule 'subscriptlist' didn't match at '' (line 1, column 21).

Я искал эту конкретную ошибку, и я не могу найти много информации о несоответствующем правиле соответствия для 'subscriptlist'.

Я ценю любое понимание. Спасибо.

2 ответа

Если вы не используете подписки, возможно, вы нашли ошибку в парсере. Если это так, то лучше всего создать отчет в системе отслеживания проблем github для проекта. Отправленная трассировка стека говорит о том, что ошибка происходит в первой строке файла и что ошибка связана с тем, как анализируется правая часть уравнения. Вы можете включить первые несколько строк в свой отчет об ошибке, чтобы помочь мне воссоздать проблему. Я добавлю случай в наш растущий набор тестов, и тогда мы сможем убедиться, что это не проблема, продвигаясь вперед.

Хорошей новостью является то, что в вашем коде нет ничего плохого. =) (Хотя вы также можете просто включить путь к файлу в .read_vensim позвоните, если вы не хотите вносить изменения в каталог).

В таком случае, есть несколько возможностей, которые могут вызвать эту проблему. Во-первых, если файл модели создается с достаточно старой версией Vensim, синтаксис может отличаться от того, для чего предназначен текущий синтаксический анализатор. Один из способов обойти это - обновить Vensim и перезагрузить туда файл модели - Vensim обновит текущий синтаксис.

Если вы уже используете последнюю версию Vensim (анализатор был разработан с использованием синтаксиса Vensim 6.3E), то ошибка синтаксического анализа может быть связана с функцией, которая еще не включена. Есть еще некоторые нерешенные проблемы с подписчиками, о которых вы можете прочитать здесь и здесь).

Другие вопросы по тегам