try
(試す) キーワードと、
catch
(捕捉) キーワードを使うと、例外を捕捉できます。
たとえば、上の例で発生するかもしれない例外を捕捉するために、以下のようなスクリプトを書くことができます。
例:
try
{
func1();
}
catch
{
inform("画像を読み込むことができません。");
}
このように、try のブロック内で例外の発生するかもしれない処理を書けば、例外がおきたときに catch のブロックを実行することができます。エラー処理をこのようにすっきりと書くことができます。
try のブロックでなにも例外が起きなかった場合は、catch のブロックも実行されません。
try のブロックでは何でも書くことができます。この例のように、はっきりとその行で例外がおきる可能性があることもありますが、関数呼び出しのそのまた関数呼び出しの先で例外が発生したときも、try ... catch を書いておけば例外が発生した時点でここに戻ってくることができます。
例外が発生した場合は、ブロックの残りの処理は中断され、try のある場所まで戻ってきます。
catch のブロックでまた例外が発生した場合は、例外はこの場所では捕捉されません。そのまま例外は関数呼び出しなどをさかのぼり、もしほかの場所で try で例外の捕捉が行われていればそこで捕捉されます。
例外が投げられてから、catch ブロックに到達する間に別の例外が発生する可能性もありますが、動作は未定義です。
例外がスクリプト内のどこでも捕捉されなかった場合、例外はそのままスクリプトを抜けてアプリケーションに渡され、そこで処理されます。
Note
通常、このような例外はエラーとして実行を中断させてしまうので、なるべくエラーが起こりそうな場所には try ... catch を書くことをおすすめします。