Ich erhalte einen Fehler mit tryCatch
und versuchen Sie, den Fehler zu beheben. Wie kann ich den Fehler jedoch erneut auslösen, wenn ich den Fehler nicht lokal behandeln kann (d. H. An Fehlerhandler von übergeordneten Funktionen weiter oben im Aufrufstack delegieren)?
Ich habe versucht, % co_de zu verwenden % , aber anstatt den Wiederholungsfehler zu sehen, sehe ich nur signalCondition
:
Was läuft falsch?
wird die Stoppbedingung erneut signalisieren, obwohl der Kontext verloren gegangen ist
%Vor% Die Rückgabe von nur e
, wie @tonytonov vorschlägt, signalisiert, dass eine Bedingung aufgetreten ist, aber nicht, dass ein Fehler aufgetreten ist.
Es gibt eine Problemumgehung, die Sie verwenden können, um zu vermeiden, dass Sie den Fehler überhaupt fangen und erneut werfen müssen. Verwenden Sie im Grunde ein Erfolgsflag mit einem on.exit
-Handler, um einen Codeblock nur auszuführen, wenn der betreffende Code fehlschlägt:
Der Hauptnachteil dieses Ansatzes besteht darin, dass, obwohl Sie wissen, dass ein Fehler aufgetreten ist (weil success
nie auf TRUE gesetzt wurde), Sie keinen Zugriff auf das Fehlerobjekt selbst erhalten. Daher müssen Sie eine andere Methode verwenden um festzustellen, ob Sie mit dem Fehler umgehen können oder nicht.
Die runFoo
-Wrapper-Funktion wird benötigt, da der on.exit
-Ausdruck beim Beenden der aktuellen Funktion ausgeführt wird. Daher muss er in einer Funktion ausgeführt werden. Wenn der Code, den Sie schreiben, bereits in einer Funktion enthalten ist, müssen Sie diesen Wrapper nicht verwenden.
Tags und Links r error-handling try-catch