Структурна обробка виняткових ситуацій - це система, що дозволяє програмісту при виникненні помилки (виняткової ситуації) зв'язатися з кодом програми, підготовленим для обробки такої помилки. Це виконується за допомогою мовних конструкцій, що як би “охороняють” фрагмент коду програми і визначають оброблювачі помилок, що будуть викликатися, якщо щось піде не так у “охоронюваному” ділянці коду. У даному випадку поняття виняткової ситуації відноситься до мови і не потрібно його плутати із системними винятковими ситуаціями (hardware exceptions), такими як General Protection Fault. Ці виняткові ситуації звичайно використовують переривання й особливі стани “заліза” для обробки критичної системної помилки; виняткові ситуації в Delphi же незалежні від “заліза”, не використовують переривань і використовуються для обробки помилкових станів, з якими підпрограма не готова мати справу. Системні виняткові ситуації, звичайно, можуть бути перехоплені і перетворені в мовні виняткові ситуації, але це тільки одне з застосувань мовних виняткових ситуацій.
При традиційній обробці помилок, помилки, виявлені в процедурі звичайно передаються назовні (у процедуру, що викликала,) у виді значення функції, що повертається, чи параметрів глобальних перемінних (прапорців). Кожна зухвала процедура повинна перевіряти результат виклику на наявність помилки і виконувати відповідні дії. Часто, це просто вихід ще вище, у більш верхню зухвалу процедуру і т.д. : функція A викликає B, B викликає C, C виявляє помилку і повертає код помилки в B, B перевіряє код, що повертається, бачить, що виникла помилка і повертає код помилки в A, A перевіряє код, що повертається, і видає повідомлення про помилку або вирішує зробити що-небудь ще, раз перша спроба не удалася.
Така “пожежна бригада” для обробки помилок трудомістка, вимагає написання великої кількості коду в який можна легко помилитися і який важко відлагоджувати.
Одна помилка в коді чи програми переприсвоєння в ланцюжку значень, що повертаються, може привести до того, что не можна буде зв'язати помилковий стан з положенням справ у зовнішньому світі. Результатом буде ненормальне поводження програми, утрата чи даних ресурсів, чи крах системи.
Структурна обробка виняткової ситуації заміщає ручну обробку помилок автоматичної, сгенерованої компілятором системою повідомлення. У приведеному вище прикладі, процедура A установила б “охорону” зі зв'язаним оброблювачем помилки на фрагмент коду, у якому викликається B. B просто викликає C. Коли C виявляє помилку, то створює (raise) виняткову ситуацію. Спеціальний код, сгенерований компілятором і убудований у Run-Time Library (RTL) починає пошук оброблювача даної виняткової ситуації. При пошуку “захищеного” ділянки коду використовується інформація, збережена в стеці. У процедурах C і B немає такої ділянки, а в A - є. Якщо один з оброблювачів помилок, що використовуються в A, підходить по типу для виниклої в C виняткової ситуації, то програма переходить на його виконання. При цьому, область стека, використовувана в B і C, очищається; виконання цих процедур припиняється.
Якщо в A немає придатного оброблювача, то пошук продовжується в більш верхньому рівні, і так може йти, поки пошук не досягне придатного оброблювача помилок серед використовуваних за замовчуванням оброблювачів у RTL. Оброблювачі помилок з RTL тільки показують повідомлення про помилку і форсовано припиняють виконання програми. Будь-яка виняткова ситуація, що залишилася неопрацьованої, приведе до припинення виконання додатка.
Без перевірки коду, що повертається, після кожного виклику підпрограми, код програми повинний бути більш простим, а скомпільований код - більш швидким. При наявності виняткових ситуацій підпрограма B не повинна містити додатковий код для перевірки результату, що повертається, і передачі його в A. B нічого не повинна робити для передачі виняткової ситуації, що виникла в C, у процедуру A - убудована система обробки виняткових ситуацій робить усю роботу.
Дана система називається структурної, оскільки обробка помилок визначається областю “захищеного” коду; такі області можуть бути вкладеними. Виконання програми не може перейти на довільну ділянку коду; виконання програми може перейти тільки на оброблювач виняткової ситуації активної програми.