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