Понимание ошибки синтаксического анализа при чтении файла модели в 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), то ошибка синтаксического анализа может быть связана с функцией, которая еще не включена. Есть еще некоторые нерешенные проблемы с подписчиками, о которых вы можете прочитать здесь и здесь).