R tryCatch 处理一种错误

Posted

技术标签:

【中文标题】R tryCatch 处理一种错误【英文标题】:R tryCatch handling one kind of error 【发布时间】:2018-04-22 05:33:48 【问题描述】:

我想知道这是检查 tryCatch 函数类型的错误或警告的方法,例如在 Java 中。

try 
            driver.findElement(By.xpath(locator)).click();
            result= true;
         catch (Exception e) 
               if(e.getMessage().contains("is not clickable at point")) 
                   System.out.println(driver.findElement(By.xpath(locator)).getAttribute("name")+" are not clicable");
                else 
                   System.err.println(e.getMessage());
               
         finally 
            break;
        

在 R 中,我只找到以一种方式处理所有错误的解决方案,例如

result = tryCatch(
    expr
, warning = function(w) 
    warning-handler-code
, error = function(e) 
    error-handler-code
, finally = 
    cleanup-code

【问题讨论】:

我使用tryCatch 添加了另一种处理错误的方法,我注意到第二个示例末尾缺少右括号。 (我无法编辑您的帖子以仅更改一个字符,因此我将其保留为评论。此评论可以在之后删除。) 【参考方案1】:

您可以使用try 来处理错误:

result <- try(log("a"))

if(class(result) == "try-error")
    error_type <- attr(result,"condition")

    print(class(error_type))
    print(error_type$message)

    if(error_type$message == "non-numeric argument to mathematical function")
        print("Do stuff")
    else
        print("Do other stuff")
    


# [1] "simpleError" "error"       "condition"  
# [1] "non-numeric argument to mathematical function"
# [1] "Do stuff"

【讨论】:

很高兴为您提供帮助,请随时接受我的回答作为您的最终解决方案【参考方案2】:

我们还可以使用 tryCatch 处理错误并分析出现的消息,在您的示例中为e$message。我已经根据这种情况调整了您的示例。

result = tryCatch(
    expr
, warning = function(w) 
    warning-handler-code
, error = function(e) 
    if(e$message == "This error should be treated in some way")
        error-handler-code-for-one-type-of-error-message
    
    else
        error-handler-code-for-other-errors
    
, finally = 
    cleanup-code

)

(我不确定 e$message 是否可以有多个字符串,在这种情况下,您可能还需要考虑使用 any 函数 if(any(e$message == "This error should be treated in some way"))

【讨论】:

以上是关于R tryCatch 处理一种错误的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用tryCatch函数调试R代码实战:tryCatch函数运行正常R代码tryCatch函数运行有错误(error)的R代码示例/tryCatch函数运行有警告(warning)的R代码示例

try 或 tryCatch 与引导 R

R:使用 tryCatch() 在循环中跳过请求失败 [500] 错误失败

R语言tryCatch使用方法:判断Warning和Error

tryCatch 函数中的 while 循环

在dplyr的mutate里面尝试tryCatch?