Passer au contenu principal
eLearner.app
Module 5 · Leçon 4 sur 420/32 dans le cours~12 min
Leçons du module (4/4)

try / catch / throw

Une erreur en JavaScript est une valeur (généralement un objet Error) qui interrompt le flux normal et remonte la pile d'appels jusqu'à ce que quelqu'un la capture. La structure pour gérer cette éventualité est try / catch.

Lever une erreur : throw

JS
function dividi(a, b) {
  if (b === 0) {
    throw new Error('Divisione per zero');
  }
  return a / b;
}

throw interrompt immédiatement la fonction en cours.

Capturer : try / catch

JS
try {
  const r = dividi(10, 0);
  console.log('ok', r);
} catch (err) {
  console.log('errore:', err.message); // 'errore: Divisione per zero'
}

// Il programma continua qui, anche se c'è stato un errore.

Tout ce qui se trouve dans try est exécuté ; si une erreur est levée (par un throw ou par n'importe quelle opération qui échoue), le contrôle passe au bloc catch. La variable après catch (...) reçoit l'objet d'erreur.

finally (optionnel)

Du code qui s'exécute toujours, qu'il y ait erreur ou non. Utile pour libérer des ressources :

JS
try {
  // ... operazione rischiosa
} catch (err) {
  // ... log
} finally {
  // ... pulizia (sempre eseguita)
}

Quand l'utiliser (et quand ne pas l'utiliser)

  • Oui : opérations d'E/S (JSON.parse sur des données non fiables, fetch, accès au disque), conversions pouvant échouer.
  • Peut-être pas : pour le flux de contrôle normal. Si tu sais qu'une entrée peut être invalide, il est préférable de la vérifier avec un if plutôt que de lever et capturer une erreur.
JS
// Tipico: parsing JSON difensivo
function parseJsonSafe(text) {
  try {
    return { ok: true, value: JSON.parse(text) };
  } catch (err) {
    return { ok: false, error: err.message };
  }
}

parseJsonSafe('{"a":1}'); // { ok: true, value: {a:1} }
parseJsonSafe('non json'); // { ok: false, error: '...' }

À toi de jouer

Exercice#js.m5.l4.e1
Tentatives : 0Chargement…

Définis `safeDivide(a, b)` : si b vaut 0, lève une Error avec le message 'Divisione per zero', sinon renvoie a/b.

Chargement de l'éditeur…
Afficher l'indice

if (b === 0) throw new Error('...'); puis return a / b.

Solution disponible après 3 tentatives

Exercice de révision

Exercice#js.m5.l4.e2
Tentatives : 0Chargement…

Définis `parseJsonSafe(text)` : si text est un JSON valide, renvoie { ok: true, value: <objet> }, sinon { ok: false }. Utilise try/catch autour de JSON.parse.

Chargement de l'éditeur…
Afficher l'indice

Enveloppe JSON.parse dans un bloc try ; dans le catch, renvoie { ok: false }.

Solution disponible après 3 tentatives