Вы смешиваете withCallingHandlers
с tryCatch
.Когда вы используете withCallingHandlers
, будет вызван ваш обработчик, а затем другие установленные ранее, то есть в вашем примере обработчик по умолчанию для условия ошибки.
Чтобы получить ожидаемое поведение, используйте что-то вроде этого:
> some_f <- function() {
+ stop("Error")
+ }
>
> t2 <- tryCatch({some_f()},
+ error=function(err){print("got here")},
+ warning=function(warn){return(NULL)})
[1] "got here"
Это также установит t2
в "got here"
, потому что это результат функции print()
.Вы можете поместить другое значение в качестве возврата этого обработчика ошибок, например
> t2 <- tryCatch({some_f()},
+ error=function(err){print("got here"); 123},
+ warning=function(warn){return(NULL)})
[1] "got here"
> t2
[1] 123