在PyClips中传播剪辑错误消息

时间:2010-09-14 16:05:57

标签: python clips expert-system pyclips

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

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

在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

如何让PyClip为我提供Clips抛出的真实错误?

1 个答案:

答案 0 :(得分: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())