Exit status of Rscript when setting options(error=utils::recover)

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Exit status of Rscript when setting options(error=utils::recover)

comic fans
Hello, I've noticed that Rscript didn't exit with error code if I set
options error = utils::recover in .Rprofile . for example

Rscript -e "asdf"

Error: object 'asdf' not found
No suitable frames for recover()

echo $?
0

if didn't set options in .Rprofile, Rscript exit with error code 1, is
this expected behavior ?

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Exit status of Rscript when setting options(error=utils::recover)

Tomas Kalibera

Please refer to the documentation (?stop, ?recover, ?dump.frames). In
non-interactive use, recover() works as dump.frames(). dump.frames() is
documented not to quit R, and the examples show how to quit the R
session with a given status automatically after dump.frames(). So in
line with the documentation, R continues after the error, it reaches the
end of the input, and returns 0.

When you run the example with the NULL default error handler (not
setting the error option), the exit status is 1 as documented in ?stop.

To avoid surprise wrt to the exit status or where execution continues,
it is best not to set default error handlers in non-interactive use (or
set them so that they exit the session with a given exit status).

Tomas

On 3/10/19 4:15 AM, comic fans wrote:

> Hello, I've noticed that Rscript didn't exit with error code if I set
> options error = utils::recover in .Rprofile . for example
>
> Rscript -e "asdf"
>
> Error: object 'asdf' not found
> No suitable frames for recover()
>
> echo $?
> 0
>
> if didn't set options in .Rprofile, Rscript exit with error code 1, is
> this expected behavior ?
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Exit status of Rscript when setting options(error=utils::recover)

comic fans
Thanks for explanation,  so recover in non-interactive session exit
with 0 is expected behavior .
dump.frames said that it always write to file (workspace , or specified file).
I have a R script run as a auto build stage, so I want to print detail
backtrace to console
 (with source file, line number)  for quickly debug, without saving any dump.
I tried

options(error= quote({utils::recover;q(status=1)}))

it do exit with 1 when script has error, but it only shows a stripped
call trace like

Calls: a ... a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> apply

instead of
...
99: rec.R#5: a(v, depth - 1)
100: rec.R#5: a(v, depth - 1)
101: rec.R#5: a(v, depth - 1)
102: rec.R#5: a(v, depth - 1)
103: rec.R#5: a(v, depth - 1)

How can I resolve this ? Thanks for advise


On Fri, Mar 15, 2019 at 10:10 PM Tomas Kalibera
<[hidden email]> wrote:

>
>
> Please refer to the documentation (?stop, ?recover, ?dump.frames). In
> non-interactive use, recover() works as dump.frames(). dump.frames() is
> documented not to quit R, and the examples show how to quit the R
> session with a given status automatically after dump.frames(). So in
> line with the documentation, R continues after the error, it reaches the
> end of the input, and returns 0.
>
> When you run the example with the NULL default error handler (not
> setting the error option), the exit status is 1 as documented in ?stop.
>
> To avoid surprise wrt to the exit status or where execution continues,
> it is best not to set default error handlers in non-interactive use (or
> set them so that they exit the session with a given exit status).
>
> Tomas
>
> On 3/10/19 4:15 AM, comic fans wrote:
> > Hello, I've noticed that Rscript didn't exit with error code if I set
> > options error = utils::recover in .Rprofile . for example
> >
> > Rscript -e "asdf"
> >
> > Error: object 'asdf' not found
> > No suitable frames for recover()
> >
> > echo $?
> > 0
> >
> > if didn't set options in .Rprofile, Rscript exit with error code 1, is
> > this expected behavior ?
> >
> > ______________________________________________
> > [hidden email] mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
>
>

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Exit status of Rscript when setting options(error=utils::recover)

Simon Urbanek
As Tomas pointed out, it may be helpful to read the R documentation. The error option expects a function, so I suppose you intended something like
options(error=function() {recover(); q(status=1)})
which corresponds to calling dump.frames()

Cheers,
Simon


> On Mar 17, 2019, at 23:44, comic fans <[hidden email]> wrote:
>
> Thanks for explanation,  so recover in non-interactive session exit
> with 0 is expected behavior .
> dump.frames said that it always write to file (workspace , or specified file).
> I have a R script run as a auto build stage, so I want to print detail
> backtrace to console
> (with source file, line number)  for quickly debug, without saving any dump.
> I tried
>
> options(error= quote({utils::recover;q(status=1)}))
>
> it do exit with 1 when script has error, but it only shows a stripped
> call trace like
>
> Calls: a ... a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> apply
>
> instead of
> ...
> 99: rec.R#5: a(v, depth - 1)
> 100: rec.R#5: a(v, depth - 1)
> 101: rec.R#5: a(v, depth - 1)
> 102: rec.R#5: a(v, depth - 1)
> 103: rec.R#5: a(v, depth - 1)
>
> How can I resolve this ? Thanks for advise
>
>
> On Fri, Mar 15, 2019 at 10:10 PM Tomas Kalibera
> <[hidden email]> wrote:
>>
>>
>> Please refer to the documentation (?stop, ?recover, ?dump.frames). In
>> non-interactive use, recover() works as dump.frames(). dump.frames() is
>> documented not to quit R, and the examples show how to quit the R
>> session with a given status automatically after dump.frames(). So in
>> line with the documentation, R continues after the error, it reaches the
>> end of the input, and returns 0.
>>
>> When you run the example with the NULL default error handler (not
>> setting the error option), the exit status is 1 as documented in ?stop.
>>
>> To avoid surprise wrt to the exit status or where execution continues,
>> it is best not to set default error handlers in non-interactive use (or
>> set them so that they exit the session with a given exit status).
>>
>> Tomas
>>
>> On 3/10/19 4:15 AM, comic fans wrote:
>>> Hello, I've noticed that Rscript didn't exit with error code if I set
>>> options error = utils::recover in .Rprofile . for example
>>>
>>> Rscript -e "asdf"
>>>
>>> Error: object 'asdf' not found
>>> No suitable frames for recover()
>>>
>>> echo $?
>>> 0
>>>
>>> if didn't set options in .Rprofile, Rscript exit with error code 1, is
>>> this expected behavior ?
>>>
>>> ______________________________________________
>>> [hidden email] mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel