エラーの取扱い

エラーが発生するとLabTalkスクリプトは中断します。しかし、エラーが発生してもスクリプトの実行を続けたいときがあります。この場合、Originでエラーが発生するスクリプトの一部分を中括弧 ("{" と "}") で囲みます。Originはエラーがあるセクションに到達すると、"}" までのスクリプトは飛ばし、中括弧の外から実行が再開されます。この意味では、中括弧と run.section() コマンドは同じ動作になります。

以下は、エラーを取り扱う方法を示す単純なサンプルです。スクリプトウィンドウでスクリプトを実行する前に、新しいワークシートを作成し、列Cが存在しないことを確認してください。

// エラー取扱いなしのスクリプト
type "Start the section";
stats col(c);
stats.max=;	
type "Finished the section";

コード行stats col(c);は、列Cが存在しないのでエラーが発生します。そして、スクリプトが中断し、次の出力だけ行われます。

Start the section
Failed to resolve range string, VarName = ix, VarValue = col(c)

今度は、中括弧を入れて、エラーの取扱いを行います。エラーが発生したかどうかを示す変数を追加し、システム変数を使ってOriginのエラーメッセージを一時的に遮断します。

// エラーの取り扱いのあるスクリプト 
type "Start the section";
int iNOE = @NOE;  // 現在のOriginエラーメッセージ出力フラグを保存する
// エラーの発生するセクション
{
	@NOE = 0; // Originのエラーメッセージを中断する
	vErr = 1; // エラー変数を true (1)にセット
	stats col(c); // これがエラーを引き起こす可能性があるコード
	stats.max=; // エラーが無い時のみ実行は継続する
	vErr = 0; // エラーが無い場合、変数は false (0)を返す
}
@NOE = iNOE; // Originのエラーメッセージを再表示
if(vErr) ty An error occurred.Continuing ...;
type "Finished the section";

出力は次のとおりです。

Start the section
An error occurred.Continuing ...
Finished the section

コード stats col(c) でのエラーの後、中括弧 (}) の外側のコードが実行され、必要に応じてエラーをトラップして処理を行います。 もし、発生したすべてのエラーの記録を保持したい場合、@ NOEに関連する行を、メッセージログでコメントアウトすることができます。