我尝试了在这里和其他地方找到的多个例子,但它总是无法满足我的需要。
我的R脚本只是一个配置验证脚本,它会检查以确保用户的环境设置正确。因此,我想尝试5个不同的步骤,并报告每个步骤的状态,以便用户可以立即修复所有问题。例如,我的第一步测试与数据库的连接,如果失败,我想打印一条消息并继续执行步骤2。但它总是在出错时停止执行,所以我只会遇到失败,然后就再也没有了。
我正在使用RScript从命令行运行脚本。W64上的exe。这是我的基本tryCatch,我用error函数进行了尝试,没有,没有任何区别,它总是在出错时中断。
tryCatch(
expr = {
res<- dbGetQuery(con, sql)
print("SQL query results:")
print(res)
}
)
您只是在错误发生时没有处理它。下面是一个reprex,演示如何在错误发生时捕获错误:
function_that_always_fails <- function() stop("I failed")
exception_catcher <- function(e) "Carry on regardless"
tryCatch(expr = function_that_always_fails())
#> Error in function_that_always_fails(): I failed
tryCatch(expr = function_that_always_fails(),
error = exception_catcher)
#> [1] "Carry on regardless"
或者,如果您想像示例中那样按顺序运行一堆测试,您可以使用以下内容:
function_that_sometimes_fails <- function(x)
{
if(x %% 2 == 0) stop("function ", x, " failed")
print(paste("test", x, "passed"))
}
exception_catcher <- function(e) print(paste(e$message, "but never mind"))
do_tests <- function() {
for(i in 1:5)
tryCatch(expr = function_that_sometimes_fails(i),
error = exception_catcher)
}
do_tests()
#> [1] "test 1 passed"
#> [1] "function 2 failed but never mind"
#> [1] "test 3 passed"
#> [1] "function 4 failed but never mind"
#> [1] "test 5 passed"
2017年8月20日由reprex软件包(v0.3.0)创建
除非你告诉它你想抓什么,否则什么也抓不到。例如,
tryCatch(
expr = {
res<- dbGetQuery(con, sql)
print("SQL query results:")
print(res)
},
error = function(e) NULL
)
出现错误时将返回NULL。没有那条线,它什么也抓不到。
旁注:res
的存在不确定。两种情况:
>
res
以前从未定义过。如果出现错误,res
将不存在,并且随之而来的任何代码都将失败并出现错误:未找到对象'res'
。
在以前的代码块中定义了res,现在可能没有必要了。但是,如果dbGetQuery失败,则不会重新定义res,因此它仍然存在,但与此查询无关。
这两种情况都有问题。我推荐如下:
res <- NULL
res <- tryCatch({
dbGetQuery(con, sql)
}, error = function(e) conditionMessage(e))
if (is.null(res)) {
print(paste("oops!", res))
} else {
print(res)
}
问题内容: 我有以下代码: 我想执行:即使(上面的行)抛出异常。除了: 我连续有很多test.setSomething,它们都可能引发异常。如果他们这样做,我只想跳过这一行,移至下一行。 为了澄清起见,我不在乎它是否引发异常,并且我无法编辑引发此异常的代码的源代码。 这是我不关心例外的情况(请不要使用通用量化的语句,例如“您永远不要忽略异常”)。我正在设置某些对象的值。当我向用户提供值时,无论如何
const SKIP_NONE = 0x00; // 不忽略任何单元格、行 const SKIP_EMPTY_ROW = 0x01; // 忽略空行 const SKIP_EMPTY_CELLS = 0x02; // 忽略空单元格(肉眼观察单元格内无数据,并不代表单元格未定义、未使用) const SKIP_EMPTY_VALUE = 0X100; // 忽略单元格空数据
问题内容: 当你只想执行但不处理异常时,如何在Python中进行呢? 以下是正确的方法吗? 问题答案: 要么 所不同的是,第一个也将赶上KeyboardInterrupt,SystemExit和类似的东西,这是直接来源于,没有
我有一个带有以下方法的TestNG类。 我想实现的是:Test2、Test3和Test 4依赖于Test1。所以只有当Test1通过时,我才需要继续。 Test5依赖于Test2、Test3和Test4。但是我可以跳过任何测试(即Test2、Test3或Test4),并且如果其他测试没有失败,我仍然希望继续执行Test5。 我怎样才能做到这一点。
我正在用Python编写一个自定义备份脚本。有时mkdir函数或print函数或任何函数由于各种原因而失败。这样的异常会使整个脚本停止,并在中途停止备份,这是非常令人沮丧的。到目前为止,我已经通过添加try:...except:...语句并正确管理这些异常来管理这些问题。但是,有一天,某个其他语句或函数也可能因为尚未触发的其他原因而引发异常。 有没有一种方法告诉脚本继续进行?是否相当于在try:.
问题内容: 我的代码中有一个try … except块,当抛出异常时。我真的只想继续编写代码,因为在这种情况下,所有内容仍然可以正常运行。问题是,如果您将except:块保留为空或不执行任何操作,则会出现语法错误。我不能使用continue,因为它不在循环中。我可以使用一个关键字来告诉代码继续运行吗? 问题答案: except Exception: pass 适用于pass语句的Python文档