Fehlerbehandlung vor Warnungen in tryCatch

8

Ich habe es mit einer Funktion zu tun, die sowohl Fehler als auch Warnungen enthält. (verwandt: Warnung wegen Warnung )

Oft wird bei einer Warnung ein Fehler ausgegeben. In diesen Situationen möchte ich die Warnung ignorieren und nur den Fehler verarbeiten.

Wenn es andererseits nur eine Warnung gibt (ohne Fehler), möchte ich die Warnung abfangen.

Ich versuche, mit dem notorisch einfach zu bedienenden tryCatch zu arbeiten.

Meine unmittelbare Frage ist: Gibt es eine Möglichkeit, tryCatch zur Verarbeitung von error s vor warning s zu erzwingen (oder Warnungen zu ignorieren, wenn ein Fehler auftritt)?

Mein Verständnis aus der ?tryCatch -Dokumentation ist, dass die Bedingungen mit FIFO behandelt werden. In diesem Fall lautet die Antwort auf meine unmittelbare Frage Nein - zumindest nicht direkt. In diesem Fall ist es möglich, die Warnung zu verarbeiten und die Funktion fortzusetzen, während weiterhin Fehler erfasst werden.

Lösungen für mich nicht verfügbar:

  • suppressWarnings # Ich möchte immer noch die Warnungen abfangen und behandeln
  • options(warn=2) # bestimmte Warnungen sind harmlos
%Vor%      

Wenn eine Bedingung während der Auswertung von expr signalisiert wird, werden etablierte Handler überprüft, beginnend mit den zuletzt festgelegten, für einen, der der Klasse der Bedingung entspricht. Wenn mehrere Handler in einem einzigen tryCatch bereitgestellt werden, gilt der erste als neuer als der zweite. Wenn ein Handler gefunden wird, wird die Kontrolle an den tryCatch-Aufruf übergeben, der den Handler festlegte, der Handler gefunden und alle aktuelleren Handler werden aufgelöst, der Handler wird mit der Bedingung als sein Argument aufgerufen, und das vom Handler zurückgegebene Ergebnis wird als zurückgegeben der Wert des tryCatch-Aufrufs.

Unten ist ein Spielzeugbeispiel:

%Vor%

Erwartete / ideale Ausgabe:

%Vor%     
Ricardo Saporta 17.10.2013, 17:56
quelle

3 Antworten

6

Dies bezieht sich auf "Ist es möglich, die Warnung zu verarbeiten und dann die Funktion fortzusetzen, während immer noch Fehler abgefangen werden?" Frage.

Ich hatte ein ähnliches Problem, bei dem ich meine Protokollierungsfunktionen für Warnungen und Fehler an den try catch binden und immer nach Warnungen fortsetzen und auch mehrere Versuche bei try catch, z. für den Zugriff auf ein schwaches Netzwerklaufwerk. Das habe ich am Ende benutzt. Diese oder eine vereinfachte Version könnte Ihnen bei Ihrem Nachher helfen.

%Vor%     
Hansi 18.10.2013, 10:05
quelle
5

Ich würde eine Funktion schreiben, die expression ausführt und die Fehler priorisiert.

%Vor%     
Matthew Plourde 17.10.2013 18:45
quelle
3

Ich habe eine praktische Hilfsfunktion für die Auswertung im Paket pander geschrieben, das alle Warnungen, Fehler und alles, was gedruckt wird, erfasst Standardausgabe zusammen mit dem Raw-R-Objekt, das im Aufruf zurückgegeben wird:

%Vor%     
daroczig 17.10.2013 18:19
quelle

Tags und Links