繁体   English   中英

doWithOneRestart出错

[英]Error in doWithOneRestart

我有一个更长,更复杂的代码(> 7000行),有许多嵌套函数,每个函数都包含在一个单独的tryCatch中。 代码完美无缺,除了“伪错误”:

Error in doWithOneRestart(return(expr), restart): no function to return from, jumping to top level 

doWithOneRestart()作为tryCatch函数的一个元素在R中是内部的。 我称之为“伪错误”,因为如果错误出现并在日志文件中写入错误消息,tryCatch应该导致stop() 相反,这个“错误”并没有停止程序(实际上根本没有影响它),它只在控制台上显示而不是写入日志文件。 通常的调试程序没有帮助,因为错误是不可重现的(!):它可能在程序的不同处理阶段发生。 将警告选项更改为0或-1将无济于事。

由于程序完成了这项工作,因此这个错误并不重要。 但我想了解发生了什么。 也许有人已经遇到过同样的问题,或者可能想出一个原始的调试策略......

更新(28.10.2013):我发现了问题的来源。 它与java堆溢出的问题有关(我使用xlsx包来读取Excel文件)。 在许多其他问题中:尽管与Excel文件的连接已关闭(当然!),系统将其视为未使用的连接(显示在traceback() ),尝试关闭它,但发现它已经关闭:你得到上面描述的“伪错误”,并且从不完全在同一时刻(不可再现)。 在正确的位置使用垃圾收集器gc()解决了这个问题。 该脚本现在运行稳定了好几天。

Peter Dalgaard 关于R-help的建议

获取该消息的最简单方法是从顶层执行return():

return(1) 

您可能正在尝试从source() d文件return() 或者也许source()想要在函数体内部的东西(无关的'}'字符可以做到这一点)。


通常的调试策略应该有效:在错误后调用traceback()或设置options(error = recover)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM