Ausnahmebehandlung in JMP 11<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ist es möglich, mit try()/throw() nach bestimmten JMP-Ausnahmen zu suchen?
Ich habe einen Scheduler, der mehrere Tabellen aus mehreren dynamischen Quellen aktualisiert.
Ich möchte Dinge wie fehlende Dateien, Spalten oder falsche Datentypen abfangen und in eine log.txt-Datei schreiben, damit ich leichter nach Fehlern suchen und diese beheben kann, wenn der Scheduler abstürzt. Ähnlich wie Try and Catch in Java.
Ich weiß, dass die Funktion log capture() existiert, aber da ich try() verwende, hat der Fehler keine Chance, in das Protokoll geschrieben zu werden. Es springt einfach zu meinen Fangausdrücken.
Bei Bedarf kann ich Beispielcode posten.
Danke!
Betreff: Ausnahmebehandlung in JMP 11Weiter untersucht.Die JSL-Funktion try( ) (und LogCapture) könnten wirklich einen besseren Job machen; Es übersieht mehrere Arten von Nachrichten, die über die Ausnahmemeldung zurückgemeldet werden könnten.Das Endergebnis ist, dass try( ) den Fehler abfängt, aber die genaue Fehlermeldung unterdrückt (und auch nicht an das Protokoll gesendet wird).
Ich bin mir ziemlich sicher, dass es keine Liste mit Ausnahmemeldungsmöglichkeiten geben wird.Manchmal ist „Exception_msg“ eine Zeichenfolge und manchmal eine Liste (wie in den beiden vorherigen Beispielen zu sehen).
Danke, ich werde das zu meiner Liste hinzufügen – Craige
Betreff: Ausnahmebehandlung in JMP 11Danke Craig, das ist so ziemlich die Methode, die wir als Ersatz implementiert hatten. Wir hatten unsere Schnittstellen gezwungen, mithilfe von Wrappern unsere eigene Ausnahmemeldungsvariable zu verwenden, um Probleme zu beheben. Sie konnten etwas Licht ins Dunkel bringen, warum einige der Ausgaben der JMP-Variable „Exception_msg“ keinerlei Informationen enthielten.
Gibt es eine Dokumentation aller möglichen Ausgaben der Variable „Exception_msg“ und der Ausnahmen, die sie auslösen?
Ich konnte mir vorstellen, dass dies bei der Planung äußerst nützlich war.
Betreff: Ausnahmebehandlung in JMP 11Die einzige Möglichkeit, Feedback im Catch-Ausdruck einer JSL-Funktion try() zu erhalten, ist über die Variable Exception_msg, diese Variable ist jedoch nicht immer auf einen nützlichen Wert gesetzt.Manchmal ist es.Sie können die JSL-Funktion throw() verwenden, um dies wie folgt festzulegen:
try( print("hello"); throw("bang!"), show(ception_msg))
"Hallo"
Ausnahme_msg = "Knall!";
Sie könnten also andere JSLs, die möglicherweise eine Ausnahme erzeugen, mit etwas wie diesem umschließen:
myOpen = function({file},
versuche(öffne(Datei),
throw("konnte nicht geöffnet werden "||Datei|| " Details="||char(Exception_msg)))
);
try( myopen("NOSUCHFILE.JMP"), show(ception_msg) );
Ausnahme_msg = „NOSUCHFILE.JMP-Details konnten nicht geöffnet werden =.“;
Open hat die „Exception_msg“ nicht festgelegt (keine Details, oben), aber sqrt(string value) tut es (zusätzliche Details, unten):
mysqrt = function({v},
try(sqrt(v),
throw("konnte nicht sqrt werden "||v|| "\!ndetails="||char(Exception_msg)))
);
try( mysqrt("minus one"), write(ception_msg) );
konnte nicht minus eins quadrieren
details={"Argument kann nicht in eine Zahl [oder Matrix] konvertiert werden"(1, "Sqrt", Sqrt /*###*/(v))}
Sie brauchen also nicht wirklich einen Wrapper für sqrt.Durch Verketten der möglichen „Exception_msg“ mit Ihrer eigenen, aufschlussreicheren Nachricht erhalten Sie mehr Details, wenn open so erweitert wird, dass in Zukunft die Ausnahmenachricht zurückgegeben wird.Die Funktion char() rund um die Ausnahmebedingung_msg wandelt eine nicht vorhandene Nachricht zur Verkettung in eine gültige Zeichenfolge um.
Betreff: Ausnahmebehandlung in JMP 11Weiß jemand, was die einzelnen Einträge in Ausnahmemeldung bedeuten?
Heutzutage ist es ein weiterer Eintrag:
details={"Cannot convert argument to a number [or matrix]"(1, 2, "Sqrt", Sqrt /*###*/(v))}
