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