R tryCatch обрабатывает один вид ошибок
Мне интересно, это способ проверить в функции 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 I только найти решение для обработки всех ошибок одним способом, пример
result = tryCatch({
expr
}, warning = function(w) {
warning-handler-code
}, error = function(e) {
error-handler-code
}, finally = {
cleanup-code
}
2 ответа
Решение
Вы могли бы использовать 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"
Мы также можем обрабатывать ошибки, используя 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"))