try ... except
La structure try..except permet de définir une portion de code devant être exécutée en cas d'exception.
// code à protéger
except
// code en cas d'exception
raise; // redéclenche l'exception
end;
Il est aussi possible de filtrer des classes d'exceptions particulières:
// code à protéger
except
on e : ExceptionClass1 do begin
// code en cas d'exception de type ExceptionClass1
end;
on e : ExceptionClass2 do begin
// code en cas d'exception de type ExceptionClass2
end;
end;
Cette structure permet par exemple d'effectuer des écritures dans un log d'erreurs, d'abandonner une transaction, etc.
Il est considéré comme une mauvaise pratique "d'avaler" une exception dans un gestionnaire d'exception, et comme une bonne pratique de la redéclencher (par un raise).
En effet, une exception étant typiquement une conséquence d'une situation non-anticipée par le code, toute action entreprise au delà d'une exception doit viser à garantir l'intégrité des données, et non à tenter de compléter l'opération en cours (ce qui pourrait conduire à détruire ou rendre incohérentes des données: garbage in, garbage out).