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.
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:
NewError.What enthält den Namen der Funktion.NewError.Line und NewError.File geben die Zeile an, die die Funktion aufgerufen hat.NewError.Stack enthält einen partiellen Stacktrace, mit dem angegebenen Stackframe ganz oben.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)
}
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.
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
Ermittelt oder setzt die Nummer der Zeile, in der der Fehler auftrat oder das Error-Objekt konstruiert wurde.
AktuelleZeile := ErrorObj.Line
ErrorObj.Line := NeueZeile
Ermittelt oder setzt die Fehlermeldung.
AktuelleMeldung := ErrorObj.Message
ErrorObj.Message := NeueMeldung
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> What`r`n... N moreStack-Eigenschaft 2047 Zeichen nicht überschreiten.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).
Die folgenden Unterklassen von Error sind vordefiniert:
OSError(Code), wobei Code numerisch ist, setzt Number und Message gemäß dem angegebenen systemdefinierten Fehlercode. Wenn Code weggelassen wird, wird standardmäßig A_LastError verwendet. Zum Beispiel gibt OSError(5).Message "(5) Zugriff verweigert" zurück.Fehler werden auch unter Verwendung der Basis-Error-Klasse ausgelöst.
Das reguläre Fehlerdialogfenster erfordert, dass Message, Extra, File und Line eigene Werteigenschaften sind.