Lua:
Fehlerbehandlung

Wie geht das:

Lua verwendet zwei Hauptfunktionen für die Fehlerbehandlung: pcall und xpcall. So setzt man sie ein:

function might_fail()
    if math.random() > 0.5 then
        error("Hoppla! Etwas ist schiefgelaufen.")
    else
        print("Alles gut!")
    end
end

-- Verwendung von pcall
local success, errorMessage = pcall(might_fail)

if success then
    print("Erfolg!")
else
    print("Einen Fehler gefangen:", errorMessage)
end

-- Verwendung von xpcall mit einem Fehlerbehandlungsroutine
function myErrorHandler(err)
    print("Fehlerbehandlungsroutine sagt:", err)
end

local status = xpcall(might_fail, myErrorHandler)
print("War der Aufruf erfolgreich?", status)

Eine mögliche Ausgabe könnte sein:

Einen Fehler gefangen: Hoppla! Etwas ist schiefgelaufen.
Fehlerbehandlungsroutine sagt: Hoppla! Etwas ist schiefgelaufen.
War der Aufruf erfolgreich? false

Oder, wenn kein Fehler auftritt:

Alles gut!
Erfolg!
Alles gut!
War der Aufruf erfolgreich? true

Vertiefung

Fehlerbehandlung oder “Ausnahmebehandlung” war nicht immer üblich. Frühe Programme stürzten häufig ab. Mit der Entwicklung der Programmierung wuchs auch das Bedürfnis nach Stabilität. Luas Ansatz ist im Vergleich zu einigen Sprachen einfach. Es gibt keine try/catch Blöcke, nur pcall und xpcall. Erstere schützt einen Funktionsaufruf und liefert einen Status und etwaige Fehler zurück. Letztere fügt eine Fehlerbehandlungsfunktion hinzu, die für individuelles Aufräumen oder Protokollieren nützlich ist.

Eine Alternative in Lua ist die Verwendung von assert, die einem ähnlichen Zweck dient, indem sie einen Fehler auslöst, wenn ihre Bedingung falsch ist. Aber sie ist nicht so flexibel wie pcall für komplexe Fehlerbehandlungsszenarien.

Intern arbeiten pcall und xpcall, indem sie eine “geschützte Umgebung” für das Ausführen der Funktion einrichten. Wenn ein Fehler auftaucht, fängt die Umgebung ihn ab und kann ihn entweder direkt behandeln oder an das Programm zurückgeben, um ihn zu behandeln.

Siehe auch