Pregunta

Me resulta muy difícil desarrollar con PyClips, porque aparece para reemplazar los mensajes de error útiles lanzadas por clips con un mensaje genérico "error de sintaxis". Esto hace que la depuración muy laboriosa y prácticamente imposible en las grandes bases de código cuando se utiliza PyClips.

Consideremos el siguiente ejemplo. Escribí una expresión muy grande, que contenía el operador de multiplicación, pero por error me olvidó añadir el segundo argumento. En lugar de simplemente diciendo que me estaba perdiendo un argumento, PyClips me dijeron que había un error de sintaxis. Lo que me debe haber llevado 1 segundo para correcto, me tomó 5 minutos a corregirlo tan Cacé a través de mi gran expresión, buscando el error.

Aquí hay una versión condensada:

En Clips, con un mensaje de error útil:

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

Y en PyClips, con un mensaje de error inútil:

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

¿Cómo puedo obtener PyClips que me diera el real error que se clips?

¿Fue útil?

Solución

Catch the ClipsError, a continuación, lea flujoError para los detalles. Por ejemplo:

engine = clips.Environment()
engine.Reset()
engine.Clear()
try:
    engine.Load(os.path.abspath(rule_file))
except clips.ClipsError:
    logging.error(clips.ErrorStream.Read())
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top