0

我发现使用 PyClips 开发非常困难,因为它似乎用通用的“语法错误”消息替换了 Clips 抛出的有用错误消息。这使得在使用 PyClips 时在大型代码库上进行调试非常费力并且几乎不可能。

考虑以下示例。我写了一个非常大的表达式,其中包含乘法运算符,但我错误地忘记添加第二个参数。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

如何让 PyC​​lips 告诉我 Clips 抛出的真正错误?

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 回答