【问题标题】:I don't understand how to catch an error我不明白如何捕捉错误
【发布时间】:2014-02-25 17:31:50
【问题描述】:

我不明白如何捕捉错误。

例如我写了一个脚本:

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

我希望如果函数prepareMorphObjectFromFiles(InputConfig,InputGOI) 会中断,那么错误就会弹出。但即使函数没有中断,它也总是会弹出。

【问题讨论】:

  • error 的参数应该是一个函数,而不是函数调用。

标签: r


【解决方案1】:

您应该将错误处理函数作为tryCatch() 中的error 参数传递。否则它确实会一直被评估。一个例子:

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")
})

【讨论】:

  • 我写了这个:morph_input = tryCatch(prepareMorphObjectFromFiles(InputConfig,InputGOI), error =function(err){stop("Please Start Over,your Data Sets or uploaded GOI are not suitable.") })但还是不行
  • @dmitriy 所以你抓住了错误......只是抛出另一个错误。你看到问题了吗?
  • @dmitriy 虽然您仍然应该只在输入表达式中有错误时才会收到错误。我们不知道是否有所以不能说更多。
【解决方案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")

【讨论】:

  • 谢谢,我试试看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
相关资源
最近更新 更多