Error-Objekt

class Error extends Object

Error-Objekte werden vom internen Code via Throw ausgelöst, wenn ein Laufzeitfehler auftritt, können aber auch explizit vom Skript ausgelöst werden.

Error-Objekte können mit Error() erstellt und mit Catch abgerufen werden.

"ErrorObj" wird hier stellvertretend für ein beliebiges Error-Objekt verwendet, da "Error" die Klasse selbst ist.

Zusätzlich zu den von Object geerbten Methoden und Eigenschaften haben Error-Objekte die folgenden vordefinierten Methoden und Eigenschaften.

Inhaltsverzeichnis

Statische Methoden

Call

Erstellt ein Error-Objekt.

ErrorObj := Error(Message , What, Extra)
ErrorObj := Error.Call(Message , What, Extra)

Error kann mit einer der unter Fehlertypen aufgeführten Unterklassen ersetzt werden, wobei einige Unterklassen andere Parameter akzeptieren.

Die Parameter entsprechen direkt den Eigenschaften Message, What und Extra, können aber bei Error-Unterklassen, die die Methode __New überschreiben, abweichen.

Message und Extra werden in Zeichenketten umgewandelt. Diese werden in einem Fehlerdialogfenster angezeigt, wenn die Ausnahme ausgelöst, aber nicht abgefangen wurde.

What gibt die Quelle des Fehlers an. Dies kann eine beliebige Zeichenkette sein, sollte aber besser ein negativer Integer oder der Name einer laufenden Funktion sein. Die Angabe von -1 gibt die aktuelle Funktion an, -2 die Funktion, die sie aufgerufen hat, und so weiter. Wenn das Skript kompiliert ist oder der Wert keinen gültigen Stack-Frame identifiziert, wird der Wert lediglich in eine Zeichenkette umgewandelt und NewError.What zugewiesen. Andernfalls wird der identifizierte Stack-Frame wie folgt verwendet, um die anderen Eigenschaften zu ermitteln:

Die Verwendung des What-Parameters gibt einer komplexen Funktion die Möglichkeit, Hilfsfunktionen zu verwenden, um ihre Arbeit oder Parametervalidierung auszuführen, während diese internen Details aus allen gemeldeten Fehlerinformationen weggelassen werden. Zum Beispiel:

MeineFunktion(a, b) {
    CheckArg "a", a
    CheckArg "b", b
    ;...
    CheckArg(name, value) {
        if value < 0
            throw ValueError(name " ist negativ", "MeineFunktion", value)
    }
}

try
    MeineFunktion(1, -1)  ; err.Line gibt diese Zeile an.
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
    EineFunktion()
catch as e
    MsgBox(Type(e) "in " e.What ", das auf Zeile " e.Line " aufgerufen wurde.")

EineFunktion() {
    throw Error("Fehler", -1)
}

Eigenschaften

Extra

Ermittelt oder setzt eine Zeichenkette, die sich auf den Fehler bezieht.

AktuellesExtra := ErrorObj.Extra
ErrorObj.Extra := NeuesExtra

Das reguläre Fehlerdialogfenster zeigt eine Zeile mit "Specifically:" gefolgt von dieser Zeichenkette an.

File

Ermittelt oder setzt den vollständigen Pfad der Skriptdatei, die die Zeile enthält, in der der Fehler auftrat oder das Error-Objekt konstruiert wurde.

AktuelleDatei := ErrorObj.File
ErrorObj.File := NeueDatei

Line

Ermittelt oder setzt die Nummer der Zeile, in der der Fehler auftrat oder das Error-Objekt konstruiert wurde.

AktuelleZeile := ErrorObj.Line
ErrorObj.Line := NeueZeile

Message

Ermittelt oder setzt die Fehlermeldung.

AktuelleMeldung := ErrorObj.Message
ErrorObj.Message := NeueMeldung

Stack

Ermittelt oder setzt eine Zeichenkette, die den Aufrufstapel zum Zeitpunkt der Konstruktion des Error-Objekts repräsentiert.

AktuellerStapel := ErrorObj.Stack
ErrorObj.Stack := NeuerStapel

Jede Zeile kann wie folgt formatiert sein:

File (Line) : [What] Quellcode`r`n
Repräsentiert einen Aufruf der What-Funktion. File und Line geben die aktuelle Skriptzeile in dieser Stapeltiefe an. Quellcode ist die ungefähre Darstellung des tatsächlichen Quellcodes in dieser Zeile, wie in ListLines angezeigt.
> What`r`n
Repräsentiert den Start eines Threads, typischerweise die direkte Ursache für den Funktionsaufruf darüber.
... N more
Gibt an, dass der Stacktrace gekürzt wurde und dass n weitere Stackeinträge nicht angezeigt werden. Aktuell kann die Stack-Eigenschaft 2047 Zeichen nicht überschreiten.

What

Ermittelt oder setzt die Quelle, die die Ausnahme ausgelöst hat.

AktuellesWas := ErrorObj.What
ErrorObj.What := NeuesWas

Enthält normalerweise den Namen einer Funktion, ist aber leer bei Ausnahmen, die durch einen Fehler in einem Ausdruck ausgelöst wurden (z.B. wenn ein mathematischer Operator für einen nicht-numerischen Wert verwendet wird).

Fehlertypen

Die folgenden Unterklassen von Error sind vordefiniert:

Fehler werden auch unter Verwendung der Basis-Error-Klasse ausgelöst.

Bemerkungen

Das reguläre Fehlerdialogfenster erfordert, dass Message, Extra, File und Line eigene Werteigenschaften sind.

Throw, Try, Catch, Finally, OnError