Catch

Try文の実行中に値やエラーがスローされた場合に実行するstatementsを1 つ以上指定します。

Catch ErrorClass as OutputVar
{
    Statements
}

パラメータ

ErrorClass

型:Class

ErrorTimeoutErrorMyCustomErrorなど、捕捉すべき値のクラスです。これは、カンマで区切られたクラスのリストであることも可能です。各クラスのプロトタイプはロード時に解決されるため、クラスは任意の表現ではなく、正確なフルネームで指定する必要があります。Errorから派生していなくても、組み込みクラスやユーザー定義クラスであれば使用可能です。

クラスが指定されていない場合、デフォルトはErrorです。

何でもかんでもキャッチする場合は、catch Anyを使用します。

無効なクラス名を使用した場合や、同名のローカル変数が存在するためにクラスにアクセスできない場合、ロードタイムエラーが表示されます。

OutputVar

型:変数

投げられた値を格納する出力変数で、通常はErrorオブジェクトです。これは動的な変数ではありえない。

省略された場合、投げられた値に直接アクセスすることはできませんが、パラメータなしでThrowを使用することにより、再投げることができます。

Statements

値またはエラーがスローされた場合に実行するです。

一般に、単一のステートメントのみを使用する場合は、中括弧は不要です。詳しくは、{...}(ブロック)を参照してください。

備考

複数のCatch文は、それぞれ異なるクラス(または複数のクラス)を指定して、次々に使用することができます。値がリストアップされたクラスのインスタンスでない場合、このTry-Catchでは捕らえられませんが、コールスタックのさらに上のクラスで捕らえることができるかもしれません。

Catchの使用はすべて、その上のTry文に属する(関連付けられる)必要があります。Catchは、ブロックを使ってその動作を変更しない限り、常にその上にある最も近い未取得のTry文に属す。

パラメータリストは、オプションで括弧で囲むことができ、その場合、catchの後のスペースまたはタブはオプションです。

Catchの後には、オプションでElseを付けることができます。Elseは、関連するTryブロック内で例外がスローされなかった場合に実行されます。

OTB(One True Brace)スタイルはオプションで使用することができます。事例:

try {
    ...
} catch Error {
    ...
}

ロードタイムエラーはtry文が実行される前に発生するため、捕捉することができません。

TryThrowErrorオブジェクトElseFinallyブロックOnError

Tryをご覧ください。