Visit Mozilla.org

Référence de JavaScript 1.5 Core:Instructions:try...catch

Un article de MDC.


Sommaire

[modifier] Résumé

Marque un bloc d'instructions à essayer, et spécifie une réponse au cas où une exception se présenterait.

Instruction
Implémentation : JavaScript 1.4

JavaScript 1.5, NES 6.0 : Ajout de clauses catch multiples (extension Netscape).

Version ECMA : ECMA-262, Édition 3

[modifier] Syntaxe

try {
   instructions_à_essayer
}
[catch (var_exception_1 if condition_1) {
   instructions_catch_1
}]
...
[catch (var_exception_2) {
   instructions_catch_2
}]
[finally {
   instructions_finales
}]

[modifier] Paramètres

instructions_à_essayer 
Les instructions à exécuter.
instructions_catch_1, instructions_catch_2 
Instructions qui seront exécutées si une exception est déclenchée dans le bloc try.
var_exception_1, var_exception_2 
Un identifiant vers un objet d'exception pour la clause catch associée.
condition_1 
Une expression conditionnelle.
instructions_finales 
Instructions qui seront exécutées avant que l'instruction try se termine. Ils seront exécutés qu'une exception ait ou non été déclenchée ou gérée.

[modifier] Description

L'instruction try est constituée d'un bloc try, contenant une ou plusieurs instructions, et d'au moins une clause catch ou finally, ou encore des deux. C'est-à-dire que trois formes de l'instruction try existent :

  1. try...catch
  2. try...finally
  3. try...catch...finally

Une clause catch contient des instructions spécifiant ce qu'il faut faire si une exception est déclenchée dans le bloc try. C'est-à-dire qu'en principe, le bloc try est censé se dérouler sans problèmes, et si ce n'est pas le cas, le contrôle doit passer au bloc catch. Si n'importe quelle instruction au sein du bloc try (ou dans une fonction appelée depuis le bloc try) déclenche une exception, le contrôle passe immédiatement à la clause catch. Si aucune exception ne se produit dans le bloc try, la clause catch est passée.

La clause finally est exécutée après le bloc try et l'exécution éventuelle de(s) clause(s) catch, mais avant les instructions qui suivent l'instruction try. Elle est toujours exécutée, qu'une exception ait ou non été déclenchée ou traitée.

Il est possible d'imbriquer une ou plusieurs instructions try. Si une instruction try imbriquée n'a pas de clause catch, la clause catch de l'instruction try externe sera utilisée.

Ils est également possible d'utiliser l'instruction try pour gérer les exceptions Java. Consultez le Guide JavaScript 1.5 pour plus d'informations sur les exceptions Java.

[modifier] Clause catch inconditionnelle

Lorsqu'une seule clause inconditionnelle catch est utilisée, l'entrée dans le bloc catch se fait dès que n'importe quelle exception se produit. Par exemple, lorsqu'une exception est déclenchée dans le code suivant, le contrôle passe à la clause catch.

try {
   throw "monException"; // génère une exception
}
catch (e) {
   // instructions pour gérer n'importe quelle exception
   logDesErreurs(e); // passe l'objet exception au gestionnaire d'erreurs
}

[modifier] Clause catch conditionnelle

Il est également possible d'utiliser une ou plusieurs clauses catch conditionnelles pour gérer des exceptions particulières. Dans ce cas, l'entrée dans la clause catch appropriée se fait lorsque l'exception spécifiée est déclenchée. Dans l'exemple qui suit, le code dans le bloc try peut potentiellement produire trois exceptions : TypeError, RangeError et EvalError. Lorsqu'un exception se produit, le contrôle passe à la clause catch appropriée. Si l'exception n'est pas une des exceptions spécifiées et qu'une clause catch inconditionnelle existe, le contrôle passe à cette clause catch.

Si vous utilisez une clause catch inconditionnelle avec une ou plusieurs clauses catch conditionnelles, la clause catch inconditionnelle doit être spécifiée en dernier lieu. Autrement, la clause catch inconditionnelle interceptera tous les types d'exception avant qu'elles puissent atteindre les clauses conditionnelles.

try {
   maroutine(); // peut déclencher trois exceptions
} catch (e if e instanceof TypeError) {
   // instructions pour gérer les exceptions TypeError
} catch (e if e instanceof RangeError) {
   // instructions pour gérer les exceptions RangeError
} catch (e if e instanceof EvalError) {
   // instructions pour gérer les exceptions EvalError
} catch (e) {
   // instructions pour gérer toute exception non spécifiée
   logDesErreurs(e); // passe l'objet exception au gestionnaire d'erreurs
}

Note : cette fonctionnalité ne fait pas partie de la spécification ECMAScript.

[modifier] L'identifiant d'exception

Lorsqu'un exception est déclenchée dans le bloc try, var_exception (par exemple le e dans catch (e)) conserve la valeur spécifiée par l'instruction throw. Cet identifiant peut être utilisé pour obtenir des informations concernant l'exception qui a été déclenchée.

Cet identifiant est local à la clause catch. C'est-à-dire qu'il est créé à l'entrée dans la clause catch, et dès que celle-ci a fini son exécution, il n'est plus disponible.

[modifier] La clause finally

La clause finally contient des instructions à exécuter après le bloc try et les éventuelles clauses catch, mais avant les instructions qui suivent l'instruction try. La clause finally est exécutée qu'une exception ait été déclenchée ou non. Si une exception est déclenchée, les instructions de la clause finally sont exécutées même si aucune clause catch n'a pu gérer l'exception.

La clause finally peut être utilisée pour permettre à un script de se terminer proprement lorsqu'une exception se produit ; par exemple, il peut être nécessaire de libérer une ressource que votre script utilisait. L'exemple qui suit ouvre un fichier et exécute ensuite des instructions utilisant ce fichier (le JavaScript côté serveur permet d'accéder à des fichiers). Si une exception se produit pendant que le fichier est ouvert, la clause finally permet de le fermer avant que le script se termine avec une erreur.

ouvrirFichier()
try {
   // utilise une ressource
   écrireFichier(données);
}
finally {
   fermerFichier(); // libère toujours la ressource
}

[modifier] Exemples

Consultez les exemples pour l'instruction throw.

[modifier] Voir aussi

throw