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@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-tier...@uiowa.edu
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to