0

PyClips を使用して開発するのは非常に難しいと思います。Clips によってスローされる有用なエラー メッセージが、一般的な「構文エラー」メッセージに置き換えられているように見えるからです。これにより、PyClip を使用する場合、大規模なコードベースでのデバッグが非常に面倒になり、事実上不可能になります。

次の例を考えてみましょう。乗算演算子を含む非常に大きな式を書きましたが、誤って 2 番目の引数を追加するのを忘れていました。PyClips は、単に引数が不足していることを伝える代わりに、構文エラーがあることを伝えました。訂正するのに 1 秒かかるはずだったのに、間違いを探して大きな表情を探し回ったため、訂正するのに 5 分かかりました。

要約版は次のとおりです。

Clips では、役立つエラー メッセージが表示されます。

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))

PyClips では、役に立たないエラー メッセージが表示されます。

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

Clipsによってスローされた実際のエラーをPyClipsに与えるにはどうすればよいですか?

4

1 に答える 1

0

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())
于 2011-07-21T23:04:25.320 に答える