Wellllll ... ja und nein, und meistens nein.
Jede Python-Exception ist in eine bestimmte Fehlerklasse eingebettet, die von Error abgeleitet ist, und Python-Module sollen die "richtigen" Arten von Fehlern auslösen. Zum Beispiel sollte ein Index außerhalb des Bereichsfehlers IndexError auslösen. Die Basissprache kennt diese Fehler und Sie können den entsprechenden Fehlertyp in Ihrer except ... -Klausel finden.
R tut das nicht. Fehler sind nicht typisiert; Es gibt keinen wesentlichen Unterschied zwischen einem Index-Fehler und einem anderen Fehler.
Das heißt, Sie können unter bestimmten, sehr begrenzten Umständen betrügen.
> y <- tryCatch(x[[2]], error = function(e) e)
> y
<simpleError in x[[2]]: subscript out of bounds>
> y$message
[1] "subscript out of bounds"
Der Schlüssel hier ist die Verwendung der tryCatch
Funktion und die error
Klausel. Die error-Klausel in einem tryCatch ist eine Funktion einer Variablen, die beliebige Operationen an e ausführen kann, die ein Objekt vom Typ 'simpleError' ist und ein Element namens 'message' enthält. Sie können Nachricht analysieren und separat
> y <- tryCatch(x[[2]],
error = function(e) {
if ('subscript out of bounds' == e$message) return(NA) else stop(e))
})
> y
[1] NA
Dies funktioniert nur interessante Fälle behandeln, wenn Sie tatsächlich die Fehlerzeichenfolge erkennen kann, nach dem Sie suchen möchten, und dass nicht garantiert sind. (Andererseits ist es auch in Python nicht garantiert, also unterscheiden sich die Dinge nicht wirklich voneinander.)
Endgültige Frage: Warum im Namen des Himmels tun Sie das? Was sind Sie wirklich versuchen zu tun?
Was versuchen Sie WIRKLICH? –
Normalerweise würden Sie eine Eingabeüberprüfung implementieren, um die Ausnahme zu vermeiden. – Roland
Mir ist ein ähnliches Feature in R nicht bekannt, aber Fehlerbehandlungsfunktionen sind noch nicht vollständig erforscht. Ein nützlicher Ort zum Starten ist durch Lesen der Haupthilfedatei und Links linka in '? TryCatch' enthalten. – lmo