A Lua programozási nyelv

Kivételkezelés

A Luában nincsenek kivételek, csak hibák, igaz, a hibák különféle váratlan események lehetnek. Ha egy helyen hiba lép fel egy programban, annak kezelésére kétféle megoldást nyújt a nyelv: a függvény visszatérési értéke szolgáltatja a hiba kódját vagy explicit módon hibát vált ki.

Az első megoldás használatánál egy hagyományos megoldás az, ha megvizsgáljuk a függvény visszatérési értékét és amennyiben annak az értéke nil, hibaüzenetet adunk. Egy lehetséges implementáció:

n = read("*number") if not n then error("érvénytelen érték") end

A nyelv egy érdekes megoldása, hogy a fenti sor helyettesíthető a következő utasítással:

n = read("*number") assert(n, "érvénytelen érték")

Az assert függvény teszteli, hogy az első argumentuma nil-e. Ha igen, hibát vált ki. A második argumentum opcionális, a hiba fellépésekor kiírandó szöveget tartalmazza.

Hibát kiváltani az error függvénnyel lehet. Amikor egy hiba történik, az interpreter meghívja az _ERRORMESSAGE függvényt, amely eredeti implementációja szerint az _ALERT függvényt hívja meg. Az _ALERT hibaüzenetet küld a konzolra (az stderr-re). Azonban az _ERRORMESSAGE felüldefiniálható, ami lehetőséget ad a hibák programozó általi kezelésére. Speciálisan, ha nilre állítjuk az értékét, a hibák kiírása megszűnik.

Végül még egy érdekes lehetőség: a Lua lehetővé teszi, hogy egy függvényt védett módban futtassunk a pcall utasítással. Használata:

statusz, eredm = pcall (függvény, paraméterek)

A statusz változóba egy logikai érték kerül: true, ha sikeres volt a hívás, false, ha hiba történt. Az előbbi esetben a pcall visszaadja a hívott függvény minden eredményét, az utóbbi esetben csak a hibaüzenetet (az errornak megadott paramétert).

A pcall() egy másik változata az xpcall() függvény, amelynek a második argumentuma egy hibakezelő függvény, amely még a hibaüzenet visszaadása előtt lefut, így lehetőség adódik a hiba körülményeit jobban feldolgozni például a stack vizsgálatával.