2013-03-19 21 views
1

當我使用RStudio時,運行函數時可以看到任何錯誤或警告。在rpy2中捕獲R錯誤

但是,當我使用rpy2時,如何捕獲警告(允許代碼運行)和錯誤(使代碼停止),以便我可以用python以編程方式解析消息?

回答

2

直到R-3.0(當前未發佈),默認情況下,警告將打印到控制檯。 從R-3-0開始,它們不再被打印出來,因爲R開發人員將之前使用的C函數隱藏起來(並且太忙而無法記錄原因並告訴我們是否可以訪問該函數)。

爲了得到警告作爲rpy2對象,你可以這樣做:發生

from rpy2.robjects.packages import importr 
base = importr('base') 
# do things that generate R warnings 
base.warnings() 

錯誤而評估R代碼裏面引發rpy2.rinterface.RRuntimeError。趕上那些。

+0

merci mille fois! – pythOnometrist 2013-03-19 22:13:34

+0

@lgautier似乎並非所有的R運行時錯誤都會產生''rpy2.rinterface.RRuntimeError''。錯誤:inv_sympd():矩陣看起來是單數 >錯誤:chol什麼():chol():未能收斂 >中止(核心轉儲)''' 這使我完全退出Python。請注意,我正在運行的R代碼位於try/except塊內。 – DrMisha 2015-04-07 18:13:55

+1

@DrMisha這是一個古老的答案,但無論如何,你似乎在R中的錯誤與C++有關(從'std :: runtime_error'中可以看出),並且沒有被你正在使用的R庫正確捕獲。當發生這種情況時,由於錯誤導致R [轉儲核心](https://en.wikipedia.org/wiki/Core_dump),所以'rpy2'幾乎不可能正確處理錯誤。希望這可以幫助。 – Stereo 2017-10-19 04:30:03