r не может разорвать цикл while с использованием trycatch - PullRequest
0 голосов
/ 27 ноября 2018

Значение err_flag равно TRUE, но процесс все еще зацикливается и выдает «ошибку».

enter image description here

Полный код:

while(TRUE) {

     tryCatch({

           some_result = some_function(some_para) 

     }, warning = function(war) {
         print("warning")
         err_flag = TRUE

     }, error = function(err) {
         print("error")
         err_flag = TRUE

     } , finally = {

     })       

     if(err_flag) {
         break 
         # break the while loop
     } 
}

1 Ответ

0 голосов
/ 29 ноября 2018

tryCatch для функционального программирования.Это не очень подходит для взлома структур потока управления.Я предлагаю использовать try вместо.

set.seed(1) #for reproducibility

while (TRUE) {
  res <- try({
    x <- sample(1:5, 1)
    if (x == 5) stop("error")
    x
  }, silent = TRUE)
  if (class(res) == "try-error") {
    message("breaking loop")
    break
  } else message(sprintf("The number is %d.", res))
}
#The number is 2.
#The number is 2.
#The number is 3.
#breaking loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...