Ich habe mal noch eine eigene Form des Fehlermanagements erstellt.
Man kann zwar super mit try-except innerhalb der Funktionen arbeiten, jedoch ist der Typ eines Rückgabewertes fix. Somit muss ich einen Wert der diesem Typ entspricht auch im Fehlerfall zurückgeben. Dazu wird dann ein ungültiger Wert zurückgegeben. Das ist dann aber sehr speziell auf jede einzelne Funktion und deren Datentyp zugeschnitten. Ich wollte etwas in der Art "If @error" haben.
Die typgerechte Rückgabe aus einer Funktion auch im Fehlerfall bleibt davon unberührt, aber ich habe eine allgemeingültige Fehlervariable, die sich dann auch schlüssiger lesen lässt.
Die Fehlerfunktion wird mit dem Ergebnis einer Prüfung als Parameter aufgerufen. Zusätzlich wird ein (optionaler) Text für den Fehlerfall mitgegeben. Hier ist zu beachten, dass nur eine ungültige Prüfung (false) zum Fehler führt. Das Ergebnis der Prüfung wird von der Fehlerfunktion weitergeleitet, kann aber auch ignoriert werden (Bsp #2).
# ------------------------------------------------------------------------------
# allgemeine Fehlervariable des Programms
var error = (isErr: false, msg: "")
# myErr wird an das Resultat einer Bedingung geknüpft und leitet dieses weiter.
proc myErr(condition: bool = true, errMsg: string = ""): bool {.discardable.} =
if condition == true:
error = (isErr: false, msg: "")
return true
else:
error = (isErr: true, msg: errMsg)
return false
# ------------------------------------------------------------------------------
# example:
let
a = 5
b = 4
#1:
if (a < b).myErr("a ist > b!"):
echo b - a
else:
echo error.msg
#2:
(a < b).myErr("a ist > b!")
if error.isErr: echo error.msg
else: echo b - a
Alles anzeigen