我该如何确定 try 返回了错误还是没有错误?

11
我将尝试完成以下操作:
在定义 a 为:

try(htmlParse(ip[1], T)

其中,我使用了 htmlParse 函数并传入了参数 ip[1] 和 T。
ip[1] = paste('http://en.wikipedia.org/wiki/George_Clooney')

我想检查htmlParse是否有效。 对于我的列表中的许多名称,将没有维基百科网站,因此如果维基页面不存在,我需要能够检查并用NA替换ip[1]。
请问有人可以建议我如何做到这一点。 我尝试使用geterrmessage()命令,但是我不确定如何在更改名人的名称时每次刷新它。
目前我有以下内容:
if(!isTRUE(as.logical(grep(ip[1],err)))) {
    ip[1] = NA
    }
    else {

这明显不正确,因为它没有运行我想要的逻辑语句。
谢谢, Amar
3个回答

33

我认为这个简单的例子应该能够帮到你:

res <- try(log("a"),silent = TRUE)
class(res) == "try-error"
[1] TRUE

基本思想是当出现错误时,try返回(隐式地)一个类为“try-error”的对象。否则,res将包含您传递给try的表达式的结果。即:

res <- try(log(2),silent = TRUE)
res
[1] 0.6931472

仔细阅读 ?try 包含示例(这些示例可能不像它们可以简单)的一些内容。正如 GSee 在下面指出的那样,检查错误是否被抛出的更惯用方法是使用inherits(res,'try-error')


@GSee 谢谢,是的,那肯定更好。 - joran

3
我会尝试从维基百科下载所有名称(存在或不存在),并将其保存在单独的文件中。然后,我会使用grep命令查找字符串“Wikipedia does not have an article with this exact name”,对于不存在的名称,我将获得一个TRUE值。通过这种方式,我相信您可以确保解析器是否有效或名称是否存在。此外,如果您怀疑出现了问题,您还可以根据文件大小对已下载的文件进行排序。损坏的文件大小较小。

Wikipedia article for a fictitious person 另外,我会使用tryCatch函数来处理逻辑状态:

x<-3
tryCatch(x>5,error=print("this is an error"))

1
这里有一个函数,它评估一个表达式并返回TRUE(真)如果它有效,返回FALSE(假)如果无效。你也可以在表达式中赋值变量。
try_catch <- function(exprs) {!inherits(try(eval(exprs)), "try-error")}

try_catch(out <- log("a")) # returns FALSE
out # Error: object 'out' not found

try_catch(out <- log(1)) # returns TRUE
out # out = 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接