| Operatoren |
catch — Fängt im vorangehenden try-Block geworfene Exceptions.
catch( : : : Exception)
Die Operatoren try, catch, endtry und throw erlauben es, in HDevelop-Programme Code für eine dynamische Fehlerbehandlung ähnlich zu den Programmiersprachen C++ oder C# einzubauen. Grundlegende Informationen zur Fehlerbehandlung in HDevelop finden sich bei den Operatoren try, throw und dev_set_check sowie im „HDevelop User's Guide“.
Der Operator catch trennt den zu überwachenden Programmbereich von dem Code, der im Fehlerfall auszuführen ist. Tritt im vorhergehenden try-catch-Block kein Fehler auf, wird der gesamte catch-endtry-Block übersprungen. Im Fehlerfall dagegen wird von dem Operator, in dem der Fehler aufgetreten ist, (bzw. vom throw-Operator) direkt zum catch des umschließenden try-catch-Blocks gesprungen. Im Ausgabeparameter Exception wird dem catch-Operator ein Tupel mit den Fehlerdaten bzw. bei throw ein vom Benutzer weitestgehend frei definierbares Tupel übergeben.
Das wichtigste Fehlerdatum ist der Fehlercode. Daher wird dieser im Exception-Tupel immer an erster Stelle zurückgeliefert und kann direkt mit 'Exception'[0] abgefragt werden. Alle anderen Daten müssen über den Operator dev_get_exception_data abgefragt werden, da sich die Reihenfolge und der Umfang der bereitgestellten Informationen unter Umständen in zukünftigen Versionen ändern und sich beim exportierten Code von Sprache zu Sprache unterscheiden kann. Insbesondere ist zu beachten, dass im exportierten Code nicht alle Informationen verfügbar sind, sowie dass es Informationen gibt, die möglicherweise erst bei einem expliziten Zugriff darauf bereitgestellt werden (wie z.B. Fehlertexte).
Beim Fehlercode handelt es sich bei Operatoraufrufen immer um einen HALCON-Fehlercode (< 10000) bzw. beim Aufruf von Operatoren aus einem Extension Package um einen anwenderdefinierten Fehlercode (> 10000). Die HALCON-Fehlercodes werden im Anhang des „Extension Package Programmer's Manual“ aufgelistet. Wird mit throw ein benutzerdefiniertes Exception-Tupel geworfen, sollte dieses als erstes Element immer einen Fehlercode >= 30000 als Kennzeichnung enthalten. Alle weiteren Elemente können vollkommen frei gesetzt werden.
Tritt in HDevelop oder der HDevEngine ein Operatorfehler auf, werden im Exception-Tupel die folgenden Informationen über den Fehler und den Ort seines Auftretens zur Verfügung gestellt:
der HALCON-Fehlercode,
ein zusätzlicher HDevelop-spezifischer Fehlercode, der darüber informiert, ob der Fehler innerhalb des HALCON-Operators generiert wurde (Fehlercode = 21000), oder ob er bereits bei der Übergabe der Parameter, d.h. bei der Auswertung der Parameterausdrücke aufgetreten ist. Im zweiten Fall wird mit diesem Fehlercode die Art des Fehlers genauer spezifiziert. Die relevanten HDevelop-Fehlercodes werden beim Operator dev_get_exception_data aufgelistet.
der HALCON-Fehlertext,
ein passender HDevelop-spezifischer Fehlertext,
die Zeilennummer, in der der Fehler aufgetreten ist,
der Name des Operators (tritt der Fehler in einer geschützten Prozedur auf, wird '--protected--' zurückgeliefert),
die Aufruftiefe ('main' hat die Tiefe 1),
der Name der Prozedur.
Für eine automatische Fehlerbehandlung ist vor allem der HALCON-Fehlercode von Bedeutung. Die weiteren Daten haben in erster Linie informativen Charakter. Achtung: Im exportierten Code stehen die Informationen über den Fehlerort nicht oder nur eingeschränkt zur Verfügung.
Der Export der Operatoren try, catch, endtry und throw ist nur in die Sprachen C++, C# und VisualBasic/.NET möglich, da nur sie das Werfen und Fangen von Exceptions über Prozedurgrenzen hinweg unterstützen. Beim Export nach C können diese Operatoren nicht unterstützt werden.
Tupel mit den Fehlerdaten.
catch liefert immer 2 (H_MSG_TRUE) zurück.
try, endtry, throw, dev_get_exception_data, dev_set_check
Foundation
| Operatoren |