ユーザーがパスを指定した画像を処理する機能があります。私は Mathematica に少し慣れていないので、Mathematica の膨大なドキュメントについてあまり見つけることができません。Import[myFile] が失敗したときに例外をスローするにはどうすればよいですか? 私もそれを行うことができますか?
どうもありがとう。
ユーザーがパスを指定した画像を処理する機能があります。私は Mathematica に少し慣れていないので、Mathematica の膨大なドキュメントについてあまり見つけることができません。Import[myFile] が失敗したときに例外をスローするにはどうすればよいですか? 私もそれを行うことができますか?
どうもありがとう。
簡単なプロトタイプは
Catch[
Check[img = Import["myFile"], Throw[$Failed], Import::nffil];
Print["Processing image"]
]
必要に応じて sを使用してCatch
、Throw
さらに対象を絞ることができます。tag
Throw[anyExpression]
orを使用Throw[anyExpression, exceptionTag]
して、任意の式で例外をスローできます。Catch[your code]
その後、またはを使用できますCatch[yourCode,exceptionPattern]
。Mathematica の例外はJavaなどのようなオブジェクトではないため、例外継承階層を構築する手法を直接使用したり、複数のcatchステートメントを使用してより具体的なものからより一般的なものまでキャッチしたりすることはできません。例外タグは、Java の例外クラス名に似た ID を例外に与えるために必要です。Throw
2 番目の引数がないと、タグなしの例外がスローされます。Catch
2 番目の引数なし。Mathematica で例外を真剣に使用したい場合は、例外をキャッチする予定がなかったものを簡単にキャッチできるため、そのような使用は避けることをお勧めします。これは、通常 Java で Exception を使用せず、サブクラス化する場合と同じです。Mathematica にはチェック例外がないため、すべての Mathematica 例外は実行時例外と見なすことができます。の 2 番目の引数Catch
はパターンであるCatch
ため、Java の例外継承階層をある程度エミュレートして、さまざまなタグで例外をキャッチできるコマンドを作成できます。構文も異なります-ありません-例外が予想される場所からコードをtry
ラップするだけです。Catch
2 番目の引数のない Catch は、タグ付けされた例外をキャッチしないことに注意してください。Catch
2 番目の引数を指定しても、タグなしの例外はキャッチされません。両方が必要な場合は、Catch[Catch[code,pattern]] のようにネストする必要がある場合があります。組み込みとして提供される句はありませんがfinally
、Mathematica では非標準評価(ホールド属性を持つ関数など)を使用して、制御フロー構造もプログラムできるため、ユーザー定義コードでそれをエミュレートできます。ドキュメント、SO の投稿、および MathGroup で と の使用例を探すことができます。良い例がたくさん見つかりCatch
ます。Throw
HTH