A Trellis kivételkezelése néhány apró formai különbségtől eltekintve megegyezik a CLU kivételkezelésével.
8.1. Alprogram szintű kivételkezelés
Előfordulhat, hogy egy művelet nem képes teljesíteni feladatát. A program biztonsáossága érdekében ilyenkor kivételeket használunk. A kivételeket (exceptions) a művelet definíciójában kell felsorolnunk,
signals kulcsszó után.A kivétel kiváltása a signal kulcsszóval történik. Az utasításban egy objektumot is visszaadhatunk, amely a hibáról további információkat szolgáltathat a hiba kezelőjének.
signal kivételnév [ with objektum ];
A hibát a hívó blokknak kell kezelnie, vagy feljebb adni a hívási láncban a resignal kulcsszóval. A hibák kezelése a blokk végén az except kulcsszó után történik. Itt felsorolhatjuk a kezelendő kivételek nevét, és a kezelés módját. Az otherwise kulcsszó után megadhatjuk, hogy a fel nem sorolt esetekben mi a teendő.
except
on kivételnév1 do
utasítások
on kivételnév2 do
utasítások
[ ... ]
[ otherwise do
utasítások ]
Példánkban a power művelet az Integer típusban Integer hatványra emel egy számot. Ha a hatványkitevő negatív, akkor a művelet nem végezhető el, mert nem Integer számot kapunk.
operation power(me, exponent:Integer)
returns (Integer)
signals (Negative_Exponent)
is
begin
if exponent < 0 then
signal Negative_Exponent;
end if;
var value: Integer := 1;
for count: Integer in range(1, exponent) do
value := value*me;
end for;
end;
A kivétel kezelése:
begin
i := power(3,-12);
except
on Negative_Exponent do
print("error - Negative_Exponent");
end;
8.2. Blokk szintű kivételkezelés
continue:
A legbelső
loop vagy for ciklus aktuális lépését megszakítja, és a ciklusmag következő végrehajtását kezdi meg.exit [ when kifejezés1 ] [ with kifejezés2 ];
exit [ unless kifejezés1 ] [ with kifejezés2 ];
A legbelső
loop vagy for ciklust terminálja, és a ciklusmag után folytatja a program végrehajtását. A when/unless kulcsszó után írhatunk kilépési feltételt (ha kifejezés1 igaz / kivéve ha kifejezés1 igaz), illetve a with kulcsszó után megadhatjuk a ciklus visszaadott értékét.leave:
Elhagy egy blokkot, amiben éppen benne vagyunk. A blokkot címkével kell megjelölni. A blokk visszaadott értékét is megadhatjuk a with kulcsszó után.
címke begin
[ ... ]
leave címke [ with kifejezés ];
[ ... ]
end;