Gestion des exceptions dans JMP 11<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut,
Est-il possible d'utiliser try()/throw() pour rechercher des exceptions JMP spécifiques ?
J'ai un planificateur qui met à jour plusieurs tables à partir de plusieurs sources dynamiques.
Je voudrais détecter des éléments tels que des fichiers manquants, des colonnes ou des types de données incorrects et les écrire dans un fichier log.txt afin qu'il me soit facile de rechercher et de réparer quoi que ce soit en cas de panne du planificateur. Semblable à essayer et attraper en Java.
Je sais que la fonction log capture() existe, mais comme j'utilise try(), l'erreur n'a pas la possibilité d'être écrite dans le journal. Cela revient simplement à mes expressions accrocheuses.
Je peux publier un exemple de code si nécessaire.
Merci!
Re : Gestion des exceptions dans JMP 11Enquête plus approfondie.La fonction JSL try() (et LogCapture) pourrait vraiment faire un meilleur travail ; il néglige plusieurs types de messages qu'il pourrait signaler via exception_msg.Le résultat final est que try() détecte l'erreur, mais le message d'erreur exact est supprimé (et n'est pas non plus envoyé au journal).
Je suis presque sûr qu'il n'y aura pas de liste de possibilités exception_msg.Parfois, exception_msg sera une chaîne et parfois ce sera une liste (comme on le voit dans deux exemples précédents).
Merci, je vais l'ajouter à ma liste - Craige
Re : Gestion des exceptions dans JMP 11Merci Craig, c'est à peu près la méthode que nous avions mise en œuvre en stand-by. Nous avions forcé nos interfaces à utiliser notre propre variable de message d'exception à l'aide de wrappers pour résoudre les problèmes. Vous avez pu expliquer pourquoi certaines des sorties de la variable exception_msg de JMP manquaient d'informations.
Existe-t-il une documentation sur toutes les sorties possibles de la variable exception_msg et les exceptions qui les déclenchent ?
Je pouvais voir que cela était extrêmement utile dans la planification.
Re : Gestion des exceptions dans JMP 11La seule façon d'obtenir des commentaires dans l'expression catch d'une fonction JSL try() consiste à utiliser la variable Exception_msg, mais cette variable n'est pas toujours définie sur une valeur utile.Des fois ça l'est.Vous pouvez utiliser la fonction JSL throw() pour le définir, comme ceci :
try( print("bonjour"); throw("bang!"), show(exception_msg))
"Bonjour"
exception_msg = "bang!";
Vous pouvez donc envelopper d'autres JSL susceptibles de créer une exception avec quelque chose comme ceci :
monOuvert = fonction({fichier},
essayer (ouvrir (fichier),
throw("impossible d'ouvrir "||file|| " détails="||char(exception_msg)))
);
try( myopen("NOSUCHFILE.JMP"), show(exception_msg) );
exception_msg = "impossible d'ouvrir NOSUCHFILE.JMP details=.";
Open n'a pas défini exception_msg (pas de détails, ci-dessus), mais sqrt(string value) le fait (détails supplémentaires, ci-dessous) :
mysqlt = fonction({v},
essayez (sqrt (v),
throw("impossible sqrt "||v|| "\!ndetails="||char(exception_msg)))
);
try( mysqrt("moins un"), write(exception_msg) );
impossible de faire un sqrt moins un
détails={"Impossible de convertir l'argument en nombre [ou matrice]"(1, "Sqrt", Sqrt /*###*/(v))}
Vous n’avez donc pas vraiment besoin d’un wrapper pour sqrt.En concaténant l'éventuelle exception_msg à votre propre message plus éclairant, vous obtiendrez plus de détails si open est amélioré pour renvoyer le message d'exception à l'avenir.La fonction char() autour de exception_msg convertit un message inexistant en une chaîne valide pour la concaténation.
Re: Gestion des exceptions dans JMP 11Quelqu'un sait-il ce que signifient les différentes entrées de exception_msg ?
Aujourd'hui, il s'agit d'une entrée supplémentaire :
details={"Cannot convert argument to a number [or matrix]"(1, 2, "Sqrt", Sqrt /*###*/(v))}
