Manejo de excepciones en JMP 11<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola,
¿Es posible usar try()/throw() para buscar excepciones JMP específicas?
Tengo un programador que actualiza varias tablas de varias fuentes dinámicas.
Me gustaría detectar cosas como archivos faltantes, columnas o tipos de datos incorrectos y escribirlos en un log.txt para que me sea fácil buscar y corregir cualquier cosa si el programador falla. Similar a probar y atrapar en java.
Sé que existe la función de captura de registro (), sin embargo, debido a que estoy usando try (), el error no tiene la oportunidad de escribirse en el registro. Simplemente salta a mis expresiones de captura.
Puedo publicar un código de muestra si es necesario.
¡Gracias!
Re: Manejo de excepciones en JMP 11Investigado más.La función try( ) de JSL (y LogCapture) realmente podría hacer un mejor trabajo; está pasando por alto varios tipos de mensajes que podría informar a través deException_msg.El resultado final es que try( ) detecta el error, pero el mensaje de error exacto se suprime (y tampoco se envía al registro).
Estoy bastante seguro de que no habrá una lista de posibilidades de excepción_msg.A veces,Exception_msg será una cadena y, a veces, será una lista (como se vio en dos ejemplos anteriores).
Gracias, agregaré esto a mi lista - Craige
Re: Manejo de excepciones en JMP 11Gracias Craig, ese es más o menos el método que habíamos implementado en espera. Habíamos forzado a nuestras interfaces a usar nuestra propia variable de mensaje de excepción usando envoltorios para solucionar problemas. Pudo arrojar algo de luz sobre por qué algunas de las salidas de la variableException_msg de JMP carecían de información.
¿Hay alguna documentación de todas las posibles salidas de la variableException_msg y las excepciones que las activan?
Pude ver que esto es extremadamente útil en la planificación.
Re: Manejo de excepciones en JMP 11La única forma de obtener comentarios en la expresión catch de una función JSL try() es a través de la variable Exception_msg, pero esa variable no siempre se establece en un valor útil.A veces lo es.Puede usar la función JSL throw() para configurarlo, así:
try( print("hola"); throw("bang!"), show(exception_msg))
"Hola"
excepción_msg = "¡bang!";
Entonces podría envolver otro JSL que podría crear una excepción con algo como esto:
myOpen = función ({archivo},
probar(abrir(archivo),
throw("no se pudo abrir "||file|| " detalles="||char(exception_msg)))
);
try( myopen("NOSUCHFILE.JMP"), show(exception_msg) );
Exception_msg = "no se pudo abrir NOSUCHFILE.JMP detalles =.";
Open no configuró la excepción_msg (sin detalles, arriba), pero sqrt (valor de cadena) sí (detalles adicionales, a continuación):
mysqrt = función ({v},
probar(raíz cuadrada(v),
throw("no se pudo sqrt "||v|| "\!ndetalles="||char(exception_msg)))
);
try( mysqrt("menos uno"), write(exception_msg) );
no podía sqrt menos uno
detalles={"No se puede convertir el argumento en un número [o matriz]"(1, "Sqrt", Sqrt /*###*/(v))}
Así que realmente no necesitas un envoltorio para sqrt.Al concatenar el posibleException_msg con su propio mensaje más esclarecedor, obtendrá más detalles si open se mejora para devolver el mensaje de excepción en el futuro.La función char() alrededor deException_msg convierte un mensaje inexistente en una cadena válida para la concatenación.
Re: Manejo de excepciones en JMP 11¿Alguien sabe cuál es el significado de las entradas individuales de mensaje de excepción ?
Hoy en día es una entrada más:
details={"Cannot convert argument to a number [or matrix]"(1, 2, "Sqrt", Sqrt /*###*/(v))}
