Le système de traitement des erreurs proposé est très simple. On considérera deux types d'erreurs. Les erreurs graves (error/[1,2]) mettent fin au programme. Les erreurs moins importantes (warning/[1,2]) se contentent d'afficher un message et le programme peut se poursuivre. Les deux prédicats prennent en paramètre un message d'erreur et éventuellement une liste d'arguments (voir le prédicat writef/2).
Pour simplifier le contrôle des erreurs, on utilisera aussi le prédicat check/[2,3]. Ce prédicat vérifie d'abord qu'une certaine condition est satisfaite. Si ce n'est pas le cas, il génère une erreur.
SWI-Prolog propose un mécanisme d'exceptions. Cela peut être pratique, mais parfois on préférerait que certaines exceptions soient traitées comme des échecs de prédicats (par exemple l'absence d'un prédicat). Le prédicat noex/3 intercepte toutes les exceptions et les traduits en échec.
Exemples :
error(" Fichier introuvable "). warning(" Mauvaise valeur : %t ",[X]). chk(N<10, " Entier trop grand : %t ",[X]). noex((p(X,Y),q(X,Y))).