Anyone knows a way to re-throw a caught interrupt condition, so that it behaves just like the original one? I.e. no error message is printed, but the execution is stopped of course. With just calling stop in the error handler, it prints the error message, or, if there is no error message (like in the original interrupt condition), another error happens. tryCatch(Sys.sleep(100), interrupt = function(e) { e$message <- "interrupted"; stop(e) } ) <press CTRL + C / ESC here> #> Error: interrupted tryCatch(Sys.sleep(100), interrupt = function(e) stop(e)) <press CTRL + C / ESC here> #> Error in stop(e) : bad error message Thanks, Gabor
El s?b., 28 jul. 2018 a las 18:30, G?bor Cs?rdi (<csardi.gabor at gmail.com>) escribi?:> > Anyone knows a way to re-throw a caught interrupt condition, so that > it behaves just like the original one? I.e. no error message is > printed, but the execution is stopped of course. With just calling > stop in the error handler, it prints the error message, or, if there > is no error message (like in the original interrupt condition), > another error happens. > > tryCatch(Sys.sleep(100), interrupt = function(e) { e$message <- > "interrupted"; stop(e) } ) > <press CTRL + C / ESC here> > #> Error: interrupted > > tryCatch(Sys.sleep(100), interrupt = function(e) stop(e)) > <press CTRL + C / ESC here> > #> Error in stop(e) : bad error messageSorry, I probably misunderstood your intention, but... simply by not calling stop at all? This is what I see:> tryCatch(Sys.sleep(100), interrupt = function(e) do_something <<- 1)<press CTRL + C / ESC here> ^C>> do_something[1] 1 I?aki
I don't want to return a value, I want to interrupt the computation, that's why I need to re-throw . But before getting back to the user I want to run some cleanup code. G. On Sat, Jul 28, 2018 at 5:59 PM I?aki ?car <i.ucar86 at gmail.com> wrote:> > El s?b., 28 jul. 2018 a las 18:30, G?bor Cs?rdi > (<csardi.gabor at gmail.com>) escribi?: > > > > Anyone knows a way to re-throw a caught interrupt condition, so that > > it behaves just like the original one? I.e. no error message is > > printed, but the execution is stopped of course. With just calling > > stop in the error handler, it prints the error message, or, if there > > is no error message (like in the original interrupt condition), > > another error happens. > > > > tryCatch(Sys.sleep(100), interrupt = function(e) { e$message <- > > "interrupted"; stop(e) } ) > > <press CTRL + C / ESC here> > > #> Error: interrupted > > > > tryCatch(Sys.sleep(100), interrupt = function(e) stop(e)) > > <press CTRL + C / ESC here> > > #> Error in stop(e) : bad error message > > Sorry, I probably misunderstood your intention, but... simply by not > calling stop at all? This is what I see: > > > tryCatch(Sys.sleep(100), interrupt = function(e) do_something <<- 1) > <press CTRL + C / ESC here> > ^C> > > do_something > [1] 1 > > I?aki
luke-tier@ey m@ili@g off uiow@@edu
2018-Jul-28 17:37 UTC
[Rd] re-throwing an interrupt condition
The internal code does more or less signalCondition(e) ## allows for (another) handler cat("\n") ## cleans up console invokeRestart("abort") ## jump to 'abort' restart if not handled [for back compatibility it also runs the error option code if that is set, but that may go away eventually]. A version of your example:> {+ tryCatch(Sys.sleep(100), + interrupt = function(e) { + e$message <- "interrupted" + signalCondition(e) + cat("\n") + invokeRestart("abort") + }) + cat("next step\n") + } ^C>Best, luke On Sat, 28 Jul 2018, G?bor Cs?rdi wrote:> Anyone knows a way to re-throw a caught interrupt condition, so that > it behaves just like the original one? I.e. no error message is > printed, but the execution is stopped of course. With just calling > stop in the error handler, it prints the error message, or, if there > is no error message (like in the original interrupt condition), > another error happens. > > tryCatch(Sys.sleep(100), interrupt = function(e) { e$message <- > "interrupted"; stop(e) } ) > <press CTRL + C / ESC here> > #> Error: interrupted > > tryCatch(Sys.sleep(100), interrupt = function(e) stop(e)) > <press CTRL + C / ESC here> > #> Error in stop(e) : bad error message > > Thanks, > Gabor > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >-- Luke Tierney Ralph E. Wareham Professor of Mathematical Sciences University of Iowa Phone: 319-335-3386 Department of Statistics and Fax: 319-335-3017 Actuarial Science 241 Schaeffer Hall email: luke-tierney at uiowa.edu Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu
Great! invokeRestart("abort") is a life saver again, the second time this week! Thanks much! Gabor On Sat, Jul 28, 2018 at 6:37 PM <luke-tierney at uiowa.edu> wrote:> > The internal code does more or less > > signalCondition(e) ## allows for (another) handler > cat("\n") ## cleans up console > invokeRestart("abort") ## jump to 'abort' restart if not handled > > [for back compatibility it also runs the error option code if that is > set, but that may go away eventually]. > > A version of your example: > > > { > + tryCatch(Sys.sleep(100), > + interrupt = function(e) { > + e$message <- "interrupted" > + signalCondition(e) > + cat("\n") > + invokeRestart("abort") > + }) > + cat("next step\n") > + } > ^C > > > > Best, > > luke > > On Sat, 28 Jul 2018, G?bor Cs?rdi wrote: > > > Anyone knows a way to re-throw a caught interrupt condition, so that > > it behaves just like the original one? I.e. no error message is > > printed, but the execution is stopped of course. With just calling > > stop in the error handler, it prints the error message, or, if there > > is no error message (like in the original interrupt condition), > > another error happens. > > > > tryCatch(Sys.sleep(100), interrupt = function(e) { e$message <- > > "interrupted"; stop(e) } ) > > <press CTRL + C / ESC here> > > #> Error: interrupted > > > > tryCatch(Sys.sleep(100), interrupt = function(e) stop(e)) > > <press CTRL + C / ESC here> > > #> Error in stop(e) : bad error message > > > > Thanks, > > Gabor > > > > ______________________________________________ > > R-devel at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > > > -- > Luke Tierney > Ralph E. Wareham Professor of Mathematical Sciences > University of Iowa Phone: 319-335-3386 > Department of Statistics and Fax: 319-335-3017 > Actuarial Science > 241 Schaeffer Hall email: luke-tierney at uiowa.edu > Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu