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ó:
A nyelv egy érdekes megoldása, hogy a fenti sor helyettesíthető a következő
utasítással:
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:
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.