Gestion d'erreurs avec try...catch
La gestion d'erreurs permet de traiter les erreurs sans faire planter l'application
Syntaxe de base: try { code_qui_peut_échouer } catch (erreur) { traitement_erreur }
Exemple de base
try {
let objetInexistant = null;
console.log(objetInexistant.propriete);
} catch (erreur) {
console.log("Une erreur s'est produite:", erreur.message);
}
console.log("Le programme continue après l'erreur");
Types d'erreurs courantes
TypeError
// TypeError: quand on utilise une valeur d'un type incorrect
console.log("--- TypeError ---");
try {
let nombre = null;
nombre.toUpperCase(); // TypeError: cannot read property of null
} catch (erreur) {
console.log(`Type d'erreur: ${erreur.name}`);
console.log(`Message: ${erreur.message}`);
}
ReferenceError
// ReferenceError: quand on utilise une variable non déclarée
console.log("--- ReferenceError ---");
try {
console.log(variableInexistante); // ReferenceError
} catch (erreur) {
console.log(`Type d'erreur: ${erreur.name}`);
console.log(`Message: ${erreur.message}`);
}
SyntaxError
// SyntaxError: erreur de syntaxe (généralement détectée avant l'exécution)
console.log("--- SyntaxError (simulation) ---");
try {
// SyntaxError ne peut pas être attrapée avec try...catch car elle empêche l'exécution
// Exemple: eval() avec du code invalide
eval("let x = ;"); // Code JavaScript invalide
} catch (erreur) {
console.log(`Type d'erreur: ${erreur.name}`);
console.log(`Message: ${erreur.message}`);
}
RangeError
// RangeError: quand une valeur est hors de la plage acceptable
console.log("--- RangeError ---");
try {
let array = new Array(-1); // Taille négative impossible
} catch (erreur) {
console.log(`Type d'erreur: ${erreur.name}`);
console.log(`Message: ${erreur.message}`);
}
TRY...CATCH...FINALLY
// Le bloc finally s'exécute TOUJOURS, qu'il y ait erreur ou non
console.log("--- Exemple avec finally ---");
function exempleFinally(casErreur) {
try {
console.log("Début du traitement");
if (casErreur) {
throw new Error("Erreur simulée");
}
console.log("Traitement réussi");
return "Succès";
} catch (erreur) {
console.log("Erreur capturée:", erreur.message);
return "Échec";
} finally {
console.log("Nettoyage (finally s'exécute toujours)");
}
}
console.log("Résultat sans erreur:", exempleFinally(false));
console.log("Résultat avec erreur:", exempleFinally(true));
Lancer des erreurs custom (THROW)
// On peut lancer nos propres erreurs avec throw
function diviser(a, b) {
try {
if (typeof a !== 'number' || typeof b !== 'number') {
throw new TypeError("Les paramètres doivent être des nombres");
}
if (b === 0) {
throw new Error("Division par zéro impossible");
}
return a / b;
} catch (erreur) {
console.log(`Erreur dans diviser(): ${erreur.message}`);
throw erreur; // Re-lancer l'erreur pour le code appelant
} finally {
console.log("Nettoyage (finally s'exécute toujours)");
}
}