【问题标题】:stop code execution if any error如果有任何错误,停止代码执行
【发布时间】:2016-02-21 07:14:28
【问题描述】:

我有代码,我在其中一个接一个地采购多个代码。类似下面的东西

source("t1.r")
source("t2.r")
source("t3.r")
source("t4.r")

如果任何源语句出现错误,则在运行此主脚本时,我不想获取任何剩余脚本(即不想运行任何后续语句)。

我不想在每个源语句之后都写 if 错误条件。我想做一些普遍的事情,而且只在一开始。

我应该在主脚本中做哪些改变来做到这一点?

【问题讨论】:

  • 这些文件是多行代码吗?或者这些文件中是否有功能。可以看stop函数
  • 是的,它们是多行代码,但其中没有函数。
  • 停止函数,我必须在每个语句之后写,不是吗?这效率太低了,因为主脚本中有很多源语句。
  • 为什么要为 20 个脚本编写 20 次 source 调用?迭代脚本名称/路径并在循环中处理异常,不要按照 DRY 原则复制/粘贴。
  • 如果你把这些source 语句放在一个文件中(比如命名为all.R),那么你运行source("all.R"),一旦出现错误它就会停止。您是否还想知道哪个脚本产生了错误?

标签: r error-handling try-catch


【解决方案1】:

根据 Nicola 和 RHertel 的建议编辑

setwd("/Users/xxxx/Desktop/Sub")
scripts<-list.files(pattern="*.R")         

for (f in scripts)
{
  c<-try(source(f))                        
  ifelse (class(c)!="try-error", print(paste("Script Sourced:", f,sep=" ")), setwd("/Users/xxxx/Desktop")             
}

此脚本打印源代码。这样你就可以识别出哪些没有得到来源。

【讨论】:

  • 谢谢 Nicola 和 RHertel。新代码得到了很大改进。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-02-22
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多