JMP 11 の例外処理<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />やあ、
特定の JMP 例外を探すために try()/throw() を使用することは可能ですか?
複数の動的ソースから複数のテーブルを更新するスケジューラがあります。
欠落しているファイル、列、または不適切なデータ型などをキャッチして log.txt に書き込み、スケジューラがクラッシュした場合に簡単に検索して修正できるようにしたいと考えています。 Java の try と catch に似ています。
関数 log capture() が存在することは知っていますが、try() を使用しているため、エラーがログに書き込まれる機会がありません。 私のキャッチ式にジャンプするだけです。
必要に応じてサンプル コードを投稿できます。
ありがとう!
Re: JMP 11 での例外処理さらに調査した。JSL の try( ) 関数 (および LogCapture) の方が、実際にはもっとうまく機能する可能性があります。 exception_msg を介して報告される可能性のあるいくつかの種類のメッセージを見落としています。最終的に、try( ) はエラーをキャッチしますが、正確なエラー メッセージは抑制されます (ログにも送信されません)。
exception_msg の可能性のリストがないことは確かです。exception_msg は文字列の場合もあれば、リストの場合もあります (前の 2 つの例で見たように)。
ありがとう、これをリストに追加します - Craige
Re: JMP 11 での例外処理Craig さん、ありがとうございます。 問題をトラブルシューティングするために、ラッパーを使用してインターフェイスに独自の例外メッセージ変数を使用するように強制していました。 JMP の exception_msg 変数からの出力の一部に情報が欠けている理由を明らかにすることができました。
exception_msg 変数のすべての可能な出力と、それらをトリガーする例外のドキュメントはありますか?
これは計画に非常に役立つことがわかりました。
Re: JMP 11 での例外処理JSL の try() 関数の catch 式でフィードバックを取得する唯一の方法は、Exception_msg 変数を使用することですが、その変数は常に有用な値に設定されるとは限りません。時々そうです。次のように、JSL の throw() 関数を使用して設定できます。
try( print("hello"); throw("bang!"), show(exception_msg))
"こんにちは"
exception_msg = "バン!";
したがって、次のような例外を作成する可能性のある他の JSL をラップできます。
myOpen = 関数({ファイル},
試してください(開く(ファイル)、
throw("||file||" details="||char(exception_msg))) を開けませんでした
);
try( myopen("NOSUCHFILE.JMP"), show(exception_msg) );
exception_msg = "NOSUCHFILE.JMP details= を開けませんでした。";
Open は exception_msg を設定しませんでしたが (詳細なし、上記)、sqrt(string value) は設定します (詳細は以下):
mysqrt = 関数 ({v},
試してみてください(sqrt(v)、
throw("sqrt できませんでした"||v||"\!ndetails="||char(exception_msg)))
);
try( mysqrt("マイナス 1"), write(exception_msg) );
平方マイナス 1 できませんでした
details={"引数を数値 [または行列] に変換できません"(1, "Sqrt", Sqrt /*###*/(v))}
したがって、sqrt のラッパーは必要ありません。可能性のある exception_msg を独自のより明確なメッセージに連結することで、open が将来例外メッセージを返すように拡張された場合に、より詳細な情報を得ることができます。exception_msg の周りの char() 関数は、存在しないメッセージを連結用の有効な文字列に変換します。
JMP 11における例外処理について例外メッセージの個々のエントリの意味を知っている人はいますか?
今ではもう1つのエントリです:
details={"Cannot convert argument to a number [or matrix]"(1, 2, "Sqrt", Sqrt /*###*/(v))}
