pyclips中的传播剪辑错误消息
-
02-10-2019 - |
题
我发现使用PyClips开发非常困难,因为它似乎替换了使用通用的“语法错误”消息剪辑丢弃的有用错误消息。这使得在使用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
我怎么能得到pyclips给我 真实的 剪辑丢弃的错误?
解决方案
捕获剪贴器,然后阅读错误流以获取细节。例如:
engine = clips.Environment()
engine.Reset()
engine.Clear()
try:
engine.Load(os.path.abspath(rule_file))
except clips.ClipsError:
logging.error(clips.ErrorStream.Read())
不隶属于 StackOverflow