2

ユーザーがパスを指定した画像を処理する機能があります。私は Mathematica に少し慣れていないので、Mathematica の膨大なドキュメントについてあまり見つけることができません。Import[myFile] が失敗したときに例外をスローするにはどうすればよいですか? 私もそれを行うことができますか?

どうもありがとう。

4

2 に答える 2

4

簡単なプロトタイプは

Catch[
  Check[img = Import["myFile"], Throw[$Failed], Import::nffil];
  Print["Processing image"]
]

必要に応じて sを使用してCatchThrowさらに対象を絞ることができます。tag

于 2011-02-27T21:21:11.933 に答える
2

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

HTH

于 2011-02-27T21:16:26.047 に答える