2014-02-25 167 views
1

我不明白如何捕獲錯誤。我不明白如何捕獲錯誤

例如,我寫了一個腳本:

morph_input = tryCatch(prepareMorphObjectFromFiles(InputConfig,InputGOI), 
       error=stop("Please Start Over,your Data Sets or uploaded GOI are not suitable.")) 

我想,如果功能prepareMorphObjectFromFiles(InputConfig,InputGOI)將打破,就在這時,錯誤將彈出。但即使功能沒有中斷,它總是彈出。

+1

錯誤的參數應該是一個函數,而不是函數調用。 –

回答

4

你應該通過一個錯誤處理函數作爲error參數tryCatch()。否則,它總是會被評估。舉例:

tryCatch({ 
    if (runif(1) > 0.8) stop("catch me if you can!") 
    else "OK" 
}, 
error=function(err) { 
    # an error handler 
    cat("An error occured.\n") 
}) 
+0

我寫道:'morph_input = tryCatch(prepareMorphObjectFromFiles(InputConfig,InputGOI),error = function(err){stop(「請重新開始,您的數據集或上傳的GOI不適合。」) })不起作用 – dmitriy

+3

@dmitriy所以你抓住錯誤...只是爲了拋出另一個錯誤。你看到問題了嗎? – Dason

+0

@dmitriy儘管如果輸入表達式中有錯誤,您仍然應該只會得到一個錯誤。我們不知道是否有這麼說不能說更多。 – Dason

2

@gagolews給出了最喜歡的。我喜歡僅使用try,它可以幫助我更加線性地思考我的代碼(即分步驟)。

out <- try({ 
    if (runif(1) > .7) stop("catch me if you can!") 
    else "OK" 
}, silent = TRUE) 

if(inherits(out, "try-error")) message("went bad") 
+0

謝謝,我會試試看。 – dmitriy