エラーハンドリング
スクリプトの実行中にエラーが発生することがあります。これらは一般的に ランタイムエラー と呼ばれます。これは、スクリプトが実行中に発生するためで、スクリプトが実行される前に検出される 構文エラー とは対照的です。ランタイムエラーが発生すると、それは 例外をスローします 。例外がキャッチされないと、スクリプトの実行が終了し、エラーメッセージが表示されます。 try...catch...end try
制御構造を使用すると、これらの例外をキャッチして、スクリプトがエラー条件をあなたが選択した方法で処理することができます。 throw
コマンドを使用して自分自身の例外をスローしたり、キャッチした例外を再スローすることができます。
Try ... Catch ... End Try
ステートメント
Behavior: try
ステートメントは、ステートメントのブロックが実行中にスローされる可能性のある任意の例外によって終了されることから保護します。
もし例外がスローされると、コントロールはすぐに catch
ステートメントに続く最初のステートメントに移ります。例外がスローされない場合、catchブロックはスキップされ、end try
に続く次のステートメントの実行が続きます。
構文:
try
statementsToTry
{
catch {exceptionVariable}
statementsToHandleErrors
}
end [try | catch]try {to} singleStatementToTry
例:
try
doSomething
throw "Bad Problem", "Something went wrong"
doSomethingElse -- これは実行されません
catch anException
//ここでエラー処理を行います
put anException -- "Bad Problem"を表示
put anException.reason -- "Something went wrong"を表示
end try
この例では、try
ブロック内の throw
コマンドが例外をスローします。これにより、実行フローが中断され、catch
ステートメントの直後の最初の文にすぐに制御が移ります。スローされた例外(ここで説明されているように例外オブジェクトの形式で)は、anException
変数に代入されます。
基本的に、try
部分でスローされる例外は、スクリプトのcatch
部分へ直接実行を移行させます。例外が発生しない場合、catch部分はスキップされます。例外はSenseTalk自体によってスローされることがあります - 例えば、"doSomething"ハンドラがない場合、未知のコマンド例外がスローされます - または、表示されているようにあなたのスクリプトによって直接スローされます。例外が発生したハンドラでキャッチされない場合、それは最初のものを呼び出した別のハンドラでキャッチすることができます。例えば、doSomethingハンドラで例外がスローされ、そこでキャッチされない場合、それはここで、testExceptionsハンドラでキャッチされます。
catch
行の_exceptionVariable_名(例ではanException)はオプションです。提供された場合、それは例外の名前をテキスト値として持つ例外オブジェクトを受け取ります。例外オブジェクトのname
プロパティにもスローされた例外の名前が含まれています(例では"Bad Problem"