Почему withCallingHandlers по-прежнему выдает ошибку? - PullRequest
0 голосов
/ 19 сентября 2019
some_f <- function() {
  stop("Error")
}

t2 <- withCallingHandlers({some_f()},
         error=function(err){print("got here")},
         warning=function(warn){return(NULL)})

вывод:

[1] "got here"
 Error in some_f() : Error 
3. stop("Error") 
2. some_f() 
1. withCallingHandlers({
      some_f()
   }, error = function(err) {
      print("easldfa") ... 

Функция ошибки активирована, поскольку распечатано «получено».Но это все равно выдает ошибку.Так не должно быть.

1 Ответ

0 голосов
/ 19 сентября 2019

Вы смешиваете 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...