Tcl - Fehlerbehandlung

Die Fehlerbehandlung in Tcl wird mit Hilfe von bereitgestellt error und catchBefehle. Die Syntax für jeden dieser Befehle ist unten dargestellt.

Fehlersyntax

error message info code

In der obigen Fehlerbefehlssyntax ist message die Fehlermeldung, info wird in der globalen Variablen errorInfo festgelegt und Code wird in der globalen Variablen errorCode festgelegt.

Catch-Syntax

catch script resultVarName

In der obigen Syntax des Befehls catch ist script der auszuführende Code, resultVarName ist eine Variable, die den Fehler oder das Ergebnis enthält. Der Befehl catch gibt 0 zurück, wenn kein Fehler vorliegt, und 1, wenn ein Fehler vorliegt.

Ein Beispiel für eine einfache Fehlerbehandlung ist unten dargestellt -

#!/usr/bin/tclsh

proc Div {a b} {
   if {$b == 0} {
      error "Error generated by error" "Info String for error" 401
   } else {
      return [expr $a/$b]
   }
}

if {[catch {puts "Result = [Div 10 0]"} errmsg]} {
   puts "ErrorMsg: $errmsg"
   puts "ErrorCode: $errorCode"
   puts "ErrorInfo:\n$errorInfo\n"
}

if {[catch {puts "Result = [Div 10 2]"} errmsg]} {
   puts "ErrorMsg: $errmsg"
   puts "ErrorCode: $errorCode"
   puts "ErrorInfo:\n$errorInfo\n"
}

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

ErrorMsg: Error generated by error
ErrorCode: 401
ErrorInfo:
Info String for error
   (procedure "Div" line 1)
   invoked from within
"Div 10 0"

Result = 5

Wie Sie im obigen Beispiel sehen können, können wir unsere eigenen benutzerdefinierten Fehlermeldungen erstellen. Ebenso ist es möglich, den von Tcl erzeugten Fehler abzufangen. Ein Beispiel ist unten gezeigt -

#!/usr/bin/tclsh

catch {set file [open myNonexistingfile.txt]} result
puts "ErrorMsg: $result"
puts "ErrorCode: $errorCode"
puts "ErrorInfo:\n$errorInfo\n"

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

ErrorMsg: couldn't open "myNonexistingfile.txt": no such file or directory
ErrorCode: POSIX ENOENT {no such file or directory}
ErrorInfo:
couldn't open "myNonexistingfile.txt": no such file or directory
   while executing
"open myNonexistingfile.txt"