Gestione delle eccezioni in JMP 11<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao,
È possibile utilizzare try()/throw() per cercare specifiche eccezioni JMP?
Ho uno scheduler che aggiorna diverse tabelle da diverse fonti dinamiche.
Vorrei rilevare cose come file mancanti, colonne o tipi di dati errati e scriverli in un log.txt in modo che sia facile per me cercare e correggere qualsiasi cosa se lo scheduler si arresta in modo anomalo. Simile a try and catch in java.
So che la funzione log capture() esiste, tuttavia poiché sto usando try() l'errore non ha la possibilità di essere scritto nel registro. Passa solo alle mie espressioni di cattura.
Posso pubblicare codice di esempio, se necessario.
Grazie!
Re: Gestione delle eccezioni in JMP 11Indagato ulteriormente.La funzione JSL try() (e LogCapture) potrebbe davvero fare un lavoro migliore; trascura diversi tipi di messaggi che potrebbe riportare tramite exception_msg.Il risultato finale è try() rileva l'errore, ma il messaggio di errore esatto viene soppresso (e nemmeno inviato al log).
Sono abbastanza sicuro che non ci sarà un elenco di possibilità exception_msg.A volte l'exception_msg sarà una stringa ea volte sarà un elenco (come visto nei due esempi precedenti).
Grazie, lo aggiungerò alla mia lista: Craige
Re: Gestione delle eccezioni in JMP 11Grazie Craig, questo è più o meno il metodo che avevamo implementato come stand by. Avevamo forzato le nostre interfacce a utilizzare la nostra variabile di messaggio di eccezione utilizzando i wrapper per risolvere i problemi. Sei stato in grado di far luce sul motivo per cui alcuni degli output della variabile exception_msg di JMP erano privi di qualsiasi informazione.
Esiste una documentazione di tutti i possibili output della variabile exception_msg e delle eccezioni che li attivano?
Ho potuto vedere che questo è estremamente utile nella pianificazione.
Re: Gestione delle eccezioni in JMP 11L'unico modo per ottenere feedback nell'espressione catch di una funzione JSL try() è tramite la variabile Exception_msg, ma tale variabile non è sempre impostata su un valore utile.A volte lo è.Puoi usare la funzione JSL throw() per impostarla, in questo modo:
try( print("ciao"); throw("bang!"), show(exception_msg))
"ciao"
exception_msg = "bang!";
Quindi potresti avvolgere altri JSL che potrebbero creare un'eccezione con qualcosa del genere:
myOpen = funzione({file},
prova(apri(file),
throw("impossibile aprire "||file|| " details="||char(exception_msg)))
);
try( myopen("NOSUCHFILE.JMP"), show(exception_msg) );
exception_msg = "impossibile aprire NOSUCHFILE.JMP details=.";
Open non ha impostato exception_msg (nessun dettaglio, sopra), ma sqrt(string value) lo fa (dettagli extra, sotto):
mysqrt = funzione({v},
prova(sqrt(v),
throw("impossibile eseguire sqrt "||v|| "\!ndetails="||char(exception_msg)))
);
try( mysqrt("meno uno"), write(exception_msg) );
non poteva sqrt meno uno
details={"Impossibile convertire l'argomento in un numero [o matrice]"(1, "Sqrt", Sqrt /*###*/(v))}
Quindi non hai davvero bisogno di un wrapper per sqrt.Concatenando il possibile exception_msg al tuo messaggio più illuminante, otterrai maggiori dettagli se open è migliorato per restituire il messaggio di eccezione in futuro.La funzione char() attorno a exception_msg converte un messaggio inesistente in una stringa valida per la concatenazione.
Re: Gestione delle eccezioni in JMP 11Qualcuno sa qual è il significato delle singole voci di eccezione_msg ?
oggigiorno è un'altra voce:
details={"Cannot convert argument to a number [or matrix]"(1, 2, "Sqrt", Sqrt /*###*/(v))}
