3
나는 기능이 있습니다.중첩 된 tryCatch가 오류를 catch하지 않습니까?
buggy <- function(...) {
tryCatch({
itWorked <- FALSE
stop("I don't like green eggs and ham!")
itWorked <- TRUE
}, finally = {
if (itWorked)
return("I do, Sam I am")
else
return("I do not like them, Sam I am!")
})
}
기본적으로 buggy
가 나 (itWorked
에 의해 결정 성공하지 못할 수있는 몇 가지 계산을하려고를 finally
절은 단지 계산이 뭔가를 작동하지 않은 경우에도 있는지 확인합니다 . (이 경우, "I do not like them, Sam I am!"
에서) 반환됩니다
를이 예상대로 작동합니다
> buggy()
Error in tryCatchList(expr, classes, parentenv, handlers) :
I don't like green eggs and ham!
[1] "I do not like them, Sam I am!"
이 지금은오류를 수신 할:
buggy
에 오류가 주변
tryCatch
에 오류를 발생하지 그러나
tryCatch(buggy(),
error=function(e) message('too bad! there was an error'))
왜
이'too bad! there was an error'
[1] "I do not like them, Sam I am!"
사람이 말해 줄 수 :
> tryCatch(buggy(),
+ error=function(e) message('too bad! there was an error'))
[1] "I do not like them, Sam I am!"
나는이 말을 기대 이 작동하지 않습니다? buggy
에서 오류를 어떻게 든 '제기'해야합니까?
오, 내가 볼 수 있습니다. 그렇다면'buggy'가 에러시 값을 반환하는 표준적인 절차는 무엇입니까 (제 계산의 중간 단계, 여전히 사용할 수는 있지만 재 계산하지 않으려합니다). 오류가 발생했습니다 (따라서 최종 결과 대신 중간 결과가 반환됩니다). –
방금 말한 것을 잊어 버렸습니다. 제 * 특정 경우에 다음이 내 'finally'(매개 변수'return.intermediate.on.error')에 대해 수행한다는 것을 깨달았습니다 : if (itWorked || return. intermediate.on.error) {return (...)} else {stop (reason_for_failure)}', 그리고 계산 내에서'reason_for_failure'를 저장해야 할 것입니다. 그것은 "R 방식"으로 보이지 않습니다. 다음과 같이 말하면 좋을 것입니다 :'error = function (e) {raise_error(); 반환 (...)}'. –
경고를 생성하기 위해'warning()'을 사용하면 오류를 일으키는'stop()'대신에) 당신의 목적에 맞는 것이겠습니까? 뭔가 잘못되었다는 메시지로 통보 받기를 원하는 것처럼 들리므로 가장 간단한 해결책 일 수 있습니다. –