ピリップでクリップエラーメッセージを伝播します
-
02-10-2019 - |
質問
ピクリップで開発することは非常に難しいと感じています。なぜなら、クリップによってスローされた一般的な「構文エラー」メッセージでスローされた有用なエラーメッセージを置き換えるように見えるからです。これにより、ピリップを使用する場合、大きなコードベースで非常に面倒で事実上不可能になります。
次の例を考えてください。乗算演算子を含む非常に大きな表現を書きましたが、2番目の引数を追加するのを誤って忘れていました。単に私が引数を逃していると言う代わりに、Pyclipsは構文エラーがあると言った。私が1秒かかったのは、私が正しいことを修正するのに5分かかりました。私は私の大きな表情を狩り、間違いを探して狩りをしたときに修正しました。
これが凝縮バージョンです:
クリップでは、有用なエラーメッセージがあります。
clips
CLIPS> (defrule myrule "" (myfact 123) => (bind ?prob (* (min 1 2))))
[ARGACCES4] Function * expected at least 2 argument(s)
ERROR:
(defrule MAIN::myrule ""
(myfact 123)
=>
(bind ?prob (* (min 1 2))
そして、ピリップでは、無効なエラーメッセージがあります。
python
>>> import clips
>>> clips.BuildRule('myrule','(myfact 123)','(bind ?prob (* (min 1 2)))','')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/clips/_clips_wrap.py", line 2839, in BuildRule
_c.build(construct)
_clips.ClipsError: C08: syntax error, or unable to parse expression
どうすればピリップを手に入れてもらうことができますか 本物 クリップによってスローされるエラー?
解決
ClipsErrorをキャッチしてから、詳細についてはErrorStreamを読んでください。例えば:
engine = clips.Environment()
engine.Reset()
engine.Clear()
try:
engine.Load(os.path.abspath(rule_file))
except clips.ClipsError:
logging.error(clips.ErrorStream.Read())
所属していません StackOverflow