Frage

Ich finde es sehr schwierig, mit PyClips zu entwickeln, weil es sinnvoll erscheint Fehlermeldungen von Clips mit einer generischen „Syntaxfehler“ -Meldung geworfen zu ersetzen. Dies macht das Debuggen sehr aufwendig und praktisch unmöglich, auf großen Codebases, wenn PyClips verwendet wird.

Betrachten Sie das folgende Beispiel. Ich schrieb einen sehr großen Ausdruck, der den Multiplikationsoperator enthalten ist, aber ich habe vergessen, fälschlicherweise das zweite Argument hinzuzufügen. Anstatt einfach zu sagen ich ein Argument fehlte, sagte PyClips mir ein Syntaxfehler ist. Was ich genommen haben sollte 1 Sekunde richtig, nahm mir 5 Minuten richtig, als ich durch meinen großen Ausdruck gejagt, für den Fehler suchen.

Hier ist eine verkürzte Version:

In Clips, mit einer nützlichen Fehlermeldung:

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

Und in PyClips mit einer unuseful Fehlermeldung:

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

Wie kann ich PyClips mir zu geben, die real Fehler durch Clips geworfen?

War es hilfreich?

Lösung

Catch the ClipsError, dann lesen Sie FehlerVar für die Details. Zum Beispiel:

engine = clips.Environment()
engine.Reset()
engine.Clear()
try:
    engine.Load(os.path.abspath(rule_file))
except clips.ClipsError:
    logging.error(clips.ErrorStream.Read())
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top