Domanda

mi sto trovando molto difficile sviluppare con PyClips, perché sembra di sostituire i messaggi di errore utili lanciati da clip con un messaggio generico "Errore di sintassi". Questo rende il debugging molto laboriosa e praticamente impossibile su grandi basi di codice quando si utilizza PyClips.

Si consideri il seguente esempio. Ho scritto un grande espressione, che conteneva l'operatore di moltiplicazione, ma erroneamente dimenticato di aggiungere il secondo argomento. Invece di limitarsi a dire che mi mancava un argomento, PyClips mi hanno detto che c'era un errore di sintassi. Che cosa dovrebbe mi hanno preso 1 secondo per correggere, mi ci sono voluti 5 minuti per correggere, come ho cacciato attraverso il mio grande espressione, alla ricerca per l'errore.

Ecco una versione condensata:

Nel clip, con un messaggio di errore 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))

E in PyClips, con un messaggio di errore inutile:

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

Come posso ottenere PyClips di darmi la reale errore lanciati da Clips?

È stato utile?

Soluzione

Catch the ClipsError, quindi leggere ErrorStream per i dettagli. Ad esempio:

engine = clips.Environment()
engine.Reset()
engine.Clear()
try:
    engine.Load(os.path.abspath(rule_file))
except clips.ClipsError:
    logging.error(clips.ErrorStream.Read())
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top