Question

Je trouve qu'il est très difficile de développer avec PyClips, car il semble remplacer les messages d'erreur utiles lancés par des clips avec un message « erreur de syntaxe » générique. Cela rend le débogage très laborieux et pratiquement impossible sur les grands codebases lors de l'utilisation PyClips.

Prenons l'exemple suivant. J'ai écrit une très grande expression, qui contenait l'opérateur de multiplication, mais j'ai oublié à tort d'ajouter le second argument. Au lieu de dire simplement que je manquais un argument, PyClips m'a dit qu'il y avait une erreur de syntaxe. Ce qui aurait dû me prendre 1 seconde correcte, m'a pris 5 minutes pour corriger comme je l'ai pourchassé par ma grande expression, à la recherche de l'erreur.

Voici une version condensée:

Dans des clips, avec un message d'erreur utile:

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

Et en PyClips, avec un message d'erreur unuseful:

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

Comment puis-je obtenir PyClips pour me donner la réel erreur émise par des clips?

Était-ce utile?

La solution

Catch the ClipsError, puis lisez fluxErreur pour les détails. Par exemple:

engine = clips.Environment()
engine.Reset()
engine.Clear()
try:
    engine.Load(os.path.abspath(rule_file))
except clips.ClipsError:
    logging.error(clips.ErrorStream.Read())
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top