Aller au contenu principal
ShadowAcademy

Les langages / Lua / Gestion des erreurs

Gestion des erreurs

La gestion des erreurs en Lua utilise pcall (protected call) et xpcall pour capturer les erreurs, et error() pour les lever. C'est essentiel pour créer des applications robustes.

Lever des erreurs

-- Lever une erreur simple
function diviser(a, b)
  if b == 0 then
    error("Division par zéro!")
  end
  return a / b
end

-- Lever une erreur avec niveau
function verifierAge(age)
  if type(age) ~= "number" then
    error("L'âge doit être un nombre", 2)
  end
  if age < 0 then
    error("L'âge ne peut pas être négatif", 2)
  end
  return age
end

Capturer les erreurs avec pcall

function diviser(a, b)
  if b == 0 then
    error("Division par zéro!")
  end
  return a / b
end

-- pcall retourne status, résultat/erreur
local success, resultat = pcall(diviser, 10, 2)
if success then
  print("Résultat:", resultat)  -- 5
else
  print("Erreur:", resultat)
end

-- Avec une erreur
local success, erreur = pcall(diviser, 10, 0)
if not success then
  print("Erreur capturée:", erreur)
end

xpcall avec gestionnaire d'erreurs

-- Gestionnaire d'erreurs personnalisé
function gestionnaireErreur(err)
  return "ERREUR CAPTURÉE: " .. tostring(err) .. "\n" .. debug.traceback()
end

function fonctionRisquee()
  local x = nil
  return x.valeur  -- Erreur: tentative d'accès à nil
end

-- xpcall permet un gestionnaire d'erreurs
local success, resultat = xpcall(fonctionRisquee, gestionnaireErreur)
if not success then
  print(resultat)  -- Affiche l'erreur avec stack trace
end

Pattern de gestion d'erreurs

-- Pattern commun: retourner nil + message d'erreur
function chargerFichier(nom)
  if not nom or nom == "" then
    return nil, "Nom de fichier invalide"
  end
  
  -- Simulation
  if nom ~= "config.txt" then
    return nil, "Fichier introuvable: " .. nom
  end
  
  return {contenu = "données"}, nil
end

-- Utilisation
local data, err = chargerFichier("test.txt")
if not data then
  print("Erreur:", err)
else
  print("Succès:", data.contenu)
end

1 exercice pour cette lecon

Les exercices demandent un compte : il faut bien enregistrer votre progression quelque part. La lecture, elle, reste libre. Creer un compte

  • Gestion d'erreurs avec pcall difficile 35 XP