Lua:
Feilhåndtering

Hvordan:

Lua bruker to hovedfunksjoner for feilhåndtering: pcall og xpcall. Slik bruker du dem:

function might_fail()
    if math.random() > 0.5 then
        error("Oi! Noe gikk galt.")
    else
        print("Alt bra!")
    end
end

-- Bruker pcall
local success, errorMessage = pcall(might_fail)

if success then
    print("Suksess!")
else
    print("Fanget en feil:", errorMessage)
end

-- Bruker xpcall med en feilhåndterer
function myErrorHandler(err)
    print("Feilhåndterer sier:", err)
end

local status = xpcall(might_fail, myErrorHandler)
print("Var kallet vellykket?", status)

Et eksempel på utskrift kan være:

Fanget en feil: Oi! Noe gikk galt.
Feilhåndterer sier: Oi! Noe gikk galt.
Var kallet vellykket? false

Eller, hvis ingen feil oppstår:

Alt bra!
Suksess!
Alt bra!
Var kallet vellykket? true

Dypdykk

Å håndtere feil, eller “unntakshåndtering”, var ikke alltid en greie. Tidlige programmer krasjet – mye. Ettersom kodingen utviklet seg, så gjorde også behovet for stabilitet. Lua sin tilnærming er enkel sammenlignet med noen språk. Det finnes ingen try/catch blokker, bare pcall og xpcall. Den førstnevnte beskytter et funksjonskall, og returnerer en status og eventuelle feil. Den sistnevnte legger til en feilhåndteringsfunksjon, nyttig for tilpasset opprydning eller logging.

Et alternativ i Lua er å bruke assert, som kan tjene et lignende formål ved å kaste en feil hvis dens betingelse er falsk. Men det er ikke så fleksibelt som pcall for komplekse feilhåndteringsscenarier.

Internt fungerer pcall og xpcall ved å sette opp et “beskyttet miljø” for funksjonen å kjøre. Hvis en feil dukker opp, fanger miljøet den og kan enten håndtere den med en gang eller sende den tilbake for at programmet skal håndtere den.

Se Også