A kivétel kezelésésre három különböző szerkezetet használhatunk ebben a programozási nyelvben.
Van lehetőség saját kivételek definiálására is, mégpedig úgy, hogy a kivétel osztályt a System.Exceptionvagy belőle származtatott ősosztályból kell származtatni, sőt érdemes olyan System.Exception -ból származtatott .NET-es osztályt választani, ami legjobban megközelíti az új kivétellel jelzett problémát.
Lehetőség van kivétel kiváltására is a "raise" kulcsszóval. Lehet a nyelvbe beépített kivételt kiváltani, vagy akár saját kivételt is.
A try blokkban fellépő kivételeket az except blokkban lehet lekezelni. Csak az olyan típusú kivételek lesznek lekezelve, amire írtunk külön lekezelő részt, azonban az Exception típussal az összes kivételt le lehet kezelni. A finally blokkban lévő utasítások mindenképpen végrehajtódnak, attól függetlenül, hogy volt e kivétel a try blokkban vagy sem. Példa:
Azon kívül, hogy a kivétel típusa szerint szűrhetjük a lekezelendő kivételeket, doxygen arra is ad lehetőséget, hogy egy bizonyos kivételtípus csak adott rá vonatkozó feltétel mellett le legyen kezelve. Ezt where kulcsszóval érhetjük el. Pl.:
Ha kivételkezelés közben mégis úgy döntünk, hogy ezen a szinten nem tudjuk lekezelni a kivételt, akkor „továbbküldhetjük” a következő kezelési, ehhez újra ki kell váltani a már lekezelt kivételt. Ez raise kulcsszóval oldható meg. Ha except blokkban vagyunk, akkor raise kulcsszó paraméterek nélkül az éppen kezelt kivételt váltja ki újra.
Ha a kivétel nincs lekezelve az aktuális blokkban akkor tovább terjed az őt tartalmazó blokkra, ha ott sincs lekezelve, akkor szintén tovább terjed az őt tartalmazó blokkra és így tovább egészen addig amíg a main függvényhez nem érünk, ha itt sincs lekezelve a kivétel akkor a program leáll.