La plupart du temps, la fonction qui détecte une situation exceptionnelle se trouve à un niveau très bas de l'application, souvent même dans une bibliothèque écrite préalablement à l'application. Il est impossible à ce niveau de déterminer si la situation exceptionnelle est un échec, un épuisement de ressources, ou un autre type de situation exceptionnelle. Seul le code de plus haut niveau, l'appelant direct ou indirect de la fonction est capable de le déterminer.
Le problème est donc de signaler au code d'un niveau supérieur que une situation exceptionnelle s'est produite, et que ce code prenne une décision concernant l'action à prendre. En Common Lisp, cette communication se fait à l'aide de conditions.