R是否提供任何支持将异常处理仅针对特定异常?
例如,在Python中,可以将异常处理范围缩小到特定的异常类型; e.g:
try:
return frobozz[i]
except IndexError:
return DEFAULT
在此示例中,仅当i
是i >= len(frobozz)
或i < -len(frobozz)
的整数时才会启动异常处理,但不会捕获例如由此引起的异常i
是字符串"0"
(TypeError
,而不是IndexError
)。
答案 0 :(得分:1)
Wellllll ......是和不,而且大多数没有。
每个Python异常都包含在一个特定的错误类中,该类派生自Error,而Python模块应该引发“正确”的错误。例如,索引超出范围错误应抛出IndexError。基本语言知道这些错误,因此您可以在except ...子句中捕获相应的错误类型。
R不这样做。错误是无类型的;索引越界错误与任何其他错误之间没有本质区别。
那就是说,你可以在某些非常有限的情况下作弊。
> y <- tryCatch(x[[2]], error = function(e) e)
> y
<simpleError in x[[2]]: subscript out of bounds>
> y$message
[1] "subscript out of bounds"
这里的关键是使用tryCatch
函数和error
子句。 tryCatch中的error子句是一个变量的函数,它可以对e执行任意操作,e是'simpleError'类型的对象,并包含一个名为“message”的项。您可以分别解析消息并处理有趣的案例
> y <- tryCatch(x[[2]],
error = function(e) {
if ('subscript out of bounds' == e$message) return(NA) else stop(e))
})
> y
[1] NA
仅当您能够实际检测到要查找的错误字符串时才有效,但这并不能保证。 (然而,在Python中也没有保证,所以事情并没有太大的不同。)
最后一个问题:为什么以天堂的名义你这样做?你真的试图做什么?