簡體   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