Az észlelhető futásidejű hibák kezelését az ML sok más fejlett nyelvhez hasonlóan
kivételkezelő mechanizmussal támogatja. Hiba detektálásakor az aktuális művelet kivált egy a hibára utaló kivételt, amelyet a vezérlést megkapó "legközelebbi" alkalmas
kivételkezelő kódrész dolgoz fel. A kivételek használata segít a programok biztonságosabbá és átláthatóbbá, struktúráltabbá tételében azáltal, hogy a
hibakezelő részek nyelvi szinten elkülönülnek a kód többi részétől.
ML-ben a következő (primitív) kivételek vannak előre definiálva:
val fej::_ = lista
Saját kivételeket az exception kulcsszóval definiálhatunk a típuskonstruktorokhoz hasonló módon. Például:
amelyeket azután például a következőképpen válthatunk ki:
A kivételek típusa a speciális exn típus, így a kivétel deklarációk tulajdonképpen felfoghatók az exn típus konstruktoraiként, amely ezáltal egy előre definiált, de tetszőlegesen bővíthető típusként értelmezhető.
Minden kivételkezelő részt a handle kulcsszó vezet be, amelyet a különböző kezelni kívánt kivételekre illeszkedő minták szerinti esetszétválasztás követ az anonim függvények definíciójával azonos szintaxis szerint. Például:
Megjegyezzük, hogy a fenti példához hasonló helyzetekben a let kulcsszót követő kötésekben szereplő kifejezések kiértékelése során kiváltott kivételeket is a blokkot követő kivételkezelő rész dolgozza fel.