2016-09-30 22 views
0

PythonのPySDパッケージを使用してVensimモデルファイル(.mdl)を読み込もうとすると、次のエラーメッセージが表示されます。モデルファイルをPySDに読み込むときの解析エラーの理解

私のコードは次のとおりです。

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」の失敗のマッチングルールに多くの情報を見つけることができません。

洞察力に感謝します。ありがとうございました。

+0

あなたのモデルはどのくらいの大きさですか?私たちの検査のためにここに表示するのに十分小さい? –

+0

残念ながら、私が使用しようとしているモデルは非常に大きいです。しかし、Vensim(モデルファイルが作成されたシミュレーションソフトウェア)内でモデルを実行することによって生成される問題(つまり、エラーや警告)がないため、解決策を探し始める場所がわからない。どんな考え? – Cortney

+0

OK、私はあなたを知らないので、怒らないでください。通常のデバッグ手法は、問題の原因となっている部分を見つけるために大きなコードを小さな断片に分割することです。それはできますか?または、違反行を分離するために、最後の近くのモデルのチャンクを省略できますか? –

答えて

0

良いニュースは、あなたのコードに間違いがないことです。 =)(ディレクトリ変更をしたくない場合は、ファイルへのパスを.read_vensimコールに含めることもできますが)。

この場合、この問題が発生する可能性があります。 1つは、モデルファイルがVensimのバージョンが十分に古いバージョンで作成された場合、その構文は現在のパーサが設計されているものと異なる場合があります。これを回避する方法の1つは、Vensimを更新してそこにモデルファイルをリロードすることです.Vensimは現在の構文に更新します。

Vensim(Vensim 6.3Eの構文を使用して開発された)の最新バージョンを使用している場合、解析エラーはまだ含まれていない機能が原因である可能性があります。下付き文字には未解決の問題がいくつかあります。herehereについて読むことができます。

0

サブスクリプトを使用していない場合は、パーサにバグが見つかりました。その場合は、プロジェクトのgithub issue trackerにレポートを作成することをおすすめします。あなたが投稿したスタックトレースは、ファイルの最初の行でエラーが発生していることと、エラーは方程式の右辺がどのように解析されているかと関係していることを示しています。問題を再現するのに役立つように、最初の数行をバグレポートに含めることができます。私が成長したtest suiteにケースを追加して、それが今後の問題ではないことを確認できます。

関連する問題