Error-Handling
エラーが発生するとLabTalkスクリプトは中断します。しかし、エラーが発生してもスクリプトの実行を続けたいときがあります。この場合、Originでエラーが発生するスクリプトの一部分を中括弧 ("{" と "}") で囲みます。Originはエラーがあるセクションに到達すると、"}" までのスクリプトは飛ばし、中括弧の外から実行が再開されます。この意味では、中括弧と run.section() コマンドは同じ動作になります。
以下は、エラーを取り扱う方法を示す単純なサンプルです。スクリプトウィンドウでスクリプトを実行する前に、新しいワークシートを作成し、列Cが存在しないことを確認してください。
// エラー取扱いなしのスクリプト type "Start the section"; stats col(c); stats.max=; type "Finished the section";
コード行stats col(c);は、列Cが存在しないのでエラーが発生します。そして、スクリプトが中断し、次の出力だけ行われます。
stats col(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に関連する行を、メッセージログでコメントアウトすることができます。
stats col(c)