Throw()関数を実行することにより、そのスクリプト自体を停止できます。スクリプトがエラー状態に入ってしまったときにその部分から抜け出すためには、Try()関数でそのスクリプトを囲んでおきます。
Try()関数は、2つの式を引数としてとります。Try関数はまず1つ目の式を評価します。1つ目の式がThrow()の評価によって例外を戻したときは、次を実行します。
2.
|
3.
|
Throw()には引数は必要ありませんが、オプションで2つのタイプの引数を指定できます。引数を指定した場合、Throwが実行されると、exception_msgという名前のグローバル変数にその文字列が格納されます。これについては、次の最初の例で示します。
Try()とThrow()を使って、JMPそのものが出す例外を受け取ってスクリプトを停止させることができます。
Try( Throw( "Hello." ), Show( exception_msg ) );
次の例では、Try()式を実行できないときにメッセージをログに出力します。
Try(
dt = Open( "Mydata.jmp" ); // 開くことができないファイル
Summarize( a = by( 年齢 ), c = count, meanHt = Mean( :Name("身長(インチ)") ) );
Show( a, c, meanHt );
,
Print( "このスクリプトは、データセットがないと動作しません。" );
Throw();
);
Throw()文字列が「!」で始まり、Try()式の中にある場合、Throwは例外が見つかった場所に関するエラーメッセージを作成します。
Try(
Throw( "!メッセージに感嘆符を含めます" );
,
Write( "\!Nexception_msg: ", exception_msg );
Print( "例外をキャッチしたブロックのメッセージ(感嘆符含む)" );
);
Print( "このメッセージはTryの後にあるためエラーがあると出力されません" );
a = [1 2 3, 4 5 ., 7 8 9];
b = a;
nr = N Row( a );
nc = N Col( a );
// a[2, 3 ] = 2; // "Missing b"という結果を表示させる場合は、この行のコメントを外す
Try(
sum = 0;
For( i = 1, i <= nr, i++,
For( j = 1, j <= nc, j++,
za = a[i, j];
If( Is Missing( za ),
Throw( "Missing a" )
);
zb = b[j, i];
If( Is Missing( zb ),
Throw( "Missing b" )
);
sum += za * zb;
)
);
,
Show( i, j, exception_msg );
Throw();
);
dt = New Table(); // 空のデータテーブルを作成
If( N Row( dt ) == 0,
Throw( "!空のデータテーブル" )
);