class Error extends Object
Errorオブジェクトは、実行時エラーが発生したときに組み込みコードによってスローされ、またスクリプトによって明示的にスローされることもある。
Message:エラーメッセージです。
What:何が例外を発生させたか。これは通常、関数の名前ですが、式のエラー(数値以外の値で数学演算子を使用した場合など)によりスローされる例外の場合は空白になります。
Extra:エラーに関連する文字列がある場合、その値。この値が空でない文字列に変換できる場合、標準エラーダイアログは、"Specifically:"の後にこの文字列を含む行を表示します。
File:エラーが発生した行、または Error オブジェクトが構築された行を含むスクリプトファイルのフルパス。
Line:エラーが発生した行番号、またはErrorオブジェクトが構築された行番号です。
Stack:Errorオブジェクトが構築された時点のコールスタックを表す文字列です。各行の書式は、次のようにすることができる:
File (Line) : [What] SourceCode`r`n
> What`r`n
... N more
Stack
プロパティは2047文字を超えることはできません。注:標準エラーダイアログでは、Message、Extra、File、Lineが 独自の値プロパティであることが必要です。
Error オブジェクトを作成します。
NewError := Error(Message , What, Extra)
Errorは、「エラータイプ」に記載されているサブクラスのいずれかに置き換えることができる。ただし、サブクラスによっては、異なるパラメータを取る場合もあります。
パラメータは上記のプロパティに直接対応しますが、__NewメソッドをオーバーライドするErrorサブクラスでは異なる場合があります。
Messageと Extraは文字列に変換されます。例外が発生し、捕捉されなかった場合は、エラーダイアログで表示されます。
What エラーの原因を示します。任意の文字列を指定できますが、負整数または実行中の関数名である必要があります。1を指定すると現在の関数、-2を指定するとその関数を呼び出した関数、といった具合です。スクリプトがコンパイルされたり、値が有効なスタックフレームを特定できない場合、値は単に文字列に変換され、NewError.What
に代入されます。それ以外の場合は、特定されたスタックフレームを以下のように使用して、他のプロパティを決定します:
NewError.What
には、関数の名前が含まれています。NewError.Line
と NewError.File
は、関数を呼び出した行を示します。NewError.Stack
には、指示されたスタックフレームを先頭とする部分的なスタックトレースが含まれます。Whatパラメータを使用すると、複雑な関数がヘルパー関数を使用して作業やパラメータの検証を行い、報告されるエラー情報からはそれらの内部詳細を省くことができます。事例:
MyFunction(a, b) { CheckArg "a", a CheckArg "b", b ;... CheckArg(name, value) { if value < 0 throw ValueError(name " is negative", "myfunction", value) } } try MyFunction(1, -1) ; err.Lineはこの行を示します。 catch ValueError as err MsgBox Format("{1}: {2}.`n`nFile:`t{3}`nLine:`t{4}`nWhat:`t{5}`nStack:`n{6}" , type(err), err.Message, err.File, err.Line, err.What, err.Stack)
try SomeFunction() catch as e MsgBox(type(e) " in " e.What ", which was called at line " e.Line) SomeFunction() { throw Error("Fail", -1) }
Errorのサブクラスとして、以下のものが予め定義されています:
OSError(Code)
where Code is numeric sets Number and Message based on the given OS-defined error code. Codeが省略された場合、デフォルトはA_LastErrorとなります。For example, OSError(5).Message
returns "(5) Access is denied."また、エラーは、ベースとなるErrorクラスを使用してスローされます。