Tcl - Gestion des erreurs

La gestion des erreurs dans Tcl est fournie à l'aide de error et catchcommandes. La syntaxe de chacune de ces commandes est indiquée ci-dessous.

Syntaxe d'erreur

error message info code

Dans la syntaxe de commande d'erreur ci-dessus, message est le message d'erreur, info est définie dans la variable globale errorInfo et le code est défini dans la variable globale errorCode.

Syntaxe de Catch

catch script resultVarName

Dans la syntaxe de commande catch ci-dessus, script est le code à exécuter, resultVarName est la variable qui contient l'erreur ou le résultat. La commande catch renvoie 0 s'il n'y a pas d'erreur et 1 s'il y a une erreur.

Un exemple de gestion d'erreur simple est présenté ci-dessous -

#!/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"
}

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

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

Result = 5

Comme vous pouvez le voir dans l'exemple ci-dessus, nous pouvons créer nos propres messages d'erreur personnalisés. De même, il est possible d'attraper l'erreur générée par Tcl. Un exemple est montré ci-dessous -

#!/usr/bin/tclsh

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

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

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"