A CorbScript kétféle, belső (internal) és felhasználói (user) kivételeket ismer.
Belső kivételek
A belső kivételeket az interpreter szintaktikai hibák, típus ellenőrzési problémák, helytelen műveletek kezelésére használja.
A következő előre definiált belső kivételek vannak.
- BadArgumentNumber
Ez a kivétel abban az esetben hívódik meg, ha nem megfelelő paraméterszámmal próbálunk eljárást vagy metódust hívni.
- BadIndex
String vagy tömb indexhatárának túllépésekor ez a kivétel váltódik ki.
- BadTypeCoerce
Egymásnak nem megfeleltethető típusok közötti műveletek meghívásakor váltódik ki ez a kivétel.
- ExecutionStopped
Ez a kivétel váltódik ki, ha az interpreter futása valamilyen okból megszakad, például a CTRL-C gomb megnyomásával.
- FileNotFound
Ha egy script megpróbál betölteni egy másik scriptet, amely nem található a fájlrendszrben.
- NotFound
Ismeretlen változó, attribútum vagy metódus hivatkozása esetén váltódik ki.
- NotImplemented
Ha egy külső CorbaScript szolgáltatás még nincs megvalósítva, ezt a kivételt kapjuk.
- NotSupported
Ha olyan szintaktikai konstrukciót probálunk egy objektumon használni, amit az nem támogat, ezt a kivételt kapjuk.
- Overflow
Aritmetikai túlcsordulás vezet ehhez a kivételhez.
- ReadOnlyAttribute
Ez a kivétel váltódik ki, ha egy csak olvasható attribútumot akarunk módósítani.
- SyntaxError
Szintaktikai hiba esetén kapjuk ezt a kivételt.
Felhasználói kivételek
A felhasználónak lehetősége van saját kivételek definiálására. A kivételt a throw <kifejezés> paranccsal válthatjuk ki.
Bármely CorbaScript objektum alkalmas arra, hogy a throw kifejezéseként felhasználhassuk.
Kivételek kezelése
Belső és felhasználói kivételek lekezelhetőek a try-catch-finally utasítások segítségével.
A kivételkezelés szintaxisa
<try_catch_finally_statement>::= "try" "{" <statements> "}"
{ "catch" "(" <exception_type> <identifier> ")" "{" <statements> "}" }*
[ "catch" "(" <identifier> ")" "{" <statements> "}" ] [ "finally" "{" <statements> "}" ]
<exception_type>::= <identifier> { "." <identifier> }*
A try utasítás blokkban találhatóak azok az utasítások, amelyek végrehajtása során kivételek léphetnek fel.
Ez után következnek a catch blokkok, amelyek egy adott típusú kivétel lekezelésére alkalmasak.
Ha a kiváltott kivétel típusa megfelel egy catch blokk típusának, akkor az adott catch blokk változója értékül kapja a megfelelő kivétel paraméterét és a futás megfelelő catch blokk első utasításánál folytatódik. Az utolsó opcionális típus a paraméter nélküli catch blokk, bármely kivétel elfogására alkalmas.
A szintén opcionális finally záradék minden esetben meghívódik, akár volt kivétel, akár nem.