Catch

From Base de connaissances eggdrops & TCL
Jump to: navigation, search

catch - Evalue un script et intercepte les renvois d'exceptions

Syntaxe

catch script ?varName?

Description

La commande catch peut être employée pour empecher les erreurs de faire échouer l'évaluation d'une commande. Catch appelle l'interpréteur Tcl récursivement pour exécuter script, et retourne toujours sans lever une erreur, indépendemment de toute erreur produite pendant l'exécution de script.

Si script lève une erreur, catch renverra une valeur entière différente de zéro correspondant à un des code de retours d'exceptions. Si l'argument varName est fourni, alors le message d'erreur de l'évaluation de script est affecté à la variable désigne par varName.

Si script ne lève pas d'erreur, catch renverra 0 (TCL_OK) et la valeur renvoyée par script est affectée à la variable.

Notez que catch intercepte toutes exceptions, incluant celles générées par break et continue aussi bien que les erreurs. Les seules erreurs qui ne sont pas interceptées sont les erreurs de syntaxe trouvées quand le script est compilé. Ceci est du à ce que la commande catch n'intercepte les erreurs qu'à l'exécution. Quand l'instruction catch est compilée, le script est aussi compilé et toutes les erreurs de syntaxe générent une erreur Tcl.

Exemples

La commande catch peut être employée dans un if pour des choix basés sur le succès d'un script.

if {[catch {open $someFile w} fid]} {
   puts stderr "Ne peut ouvrir $someFile en écriture\n$fid"
   exit 1
}

La commande catch n'interceptera pas les erreurs de syntaxe compilées. La première fois que la proc foo sera appelée, le corps sera compilé et une erreur Tcl sera générée.

proc foo {} {
   catch {expr {1 +- }}
}

Voir également

return, error