我观察到一个关于traceback()
的交互式和非交互式R会话之间的不同,我不明白。对于下面的代码,它会产生一个错误,但是在交互式R会话中,我可以看到回溯信息,而如果我将代码保存到test.R
并通过Rscript test.R
或R -f test.R
调用它,我不会再看到回溯:traceback()用于交互式和非交互式R会话
f = function() {
on.exit(traceback())
1 + 'a'
}
f()
在交互式R对话:
> f = function() {
+ on.exit(traceback())
+ 1 + 'a'
+ }
> f()
Error in 1 + "a" : non-numeric argument to binary operator
1: f()
非交互式执行:
$ Rscript test.R
Error in 1 + "a" : non-numeric argument to binary operator
Calls: f
No traceback available
Execution halted
我在?traceback
没有看到解释,我想知道是否有办法为非交互式R会话启用回溯。谢谢!
'traceback'查找对象在'baseenv()'中调用'.Traceback'。它看起来像(从'src/main/errors.c'),只有在除其他条件之外'R_Interactive || haveHandler'。如果没有'.Traceback',你将会得到“没有回溯可用”的消息。 'traceback'还有一个警告提到'.Traceback'。 – BenBarnes
如果您只是在脚本中设置选项(error = traceback),并删除on.exit调用,您将获得所需的效果。尽管由于错误的“步骤”它确实会造成重复。 –
@BrandonBertelsen,据我所知,仍然不会允许您访问追溯信息,尽管在非交互式会话中发生错误时无论如何都会返回调用堆栈。 – BenBarnes