169 похожих чатов

Коллеги, всем добрый день! У меня вопрос по грамотному использованию

функции tryCatch. Возможно, кто-нибудь сталкивался?

Бывают такие ошибки, когда R в дополнение к ошибке (error) генерирует также предупреждение (warning), например, сохранение файла в несуществующую директорию:


> write.csv(1, file = "c:/non_existing_path/1.csv)
Error in file(file, ifelse(append, "a", "w")) :
cannot open the connection
In addiction: Warning message:
cannot open file 'c:/non_existing_path/1.csv': No such file or directory


Однако, когда я в tryCatch определяю обработчики событий и для ошибок, и для предупреждений, всегда отрабатывает только один из них, а именно обработчик для предупреждений:


> tryCatch(
{
write.csv(1, file = "c:/non_existing_path/1.csv)
}, error = function(e) ERR <<- e, warning = function(w) WRN <<- w)
> WRN
<simpleWarning in file(file, ifelse(append, "a", "w")): cannot open file 'c:/non_existing_path/1.csv': No such file or directory>
> ERR
Error: object 'ERR' not found


При этом, неважно, какой из аргументов error или warning функции tryCatch определять первым, всегда отрабатывает именно обработчик предупреждения!

Что я делаю неправильно? Как можно выполнить оба обработчика? Спасибо!

1 ответов

15 просмотров

На самом деле в вашем случае сначала генерируется warning, потом он перехватвывается, а до генерации ошибки код в write.csv даже не доходит. Можете сравнить: tryCatch( { warning("Warning") stop("Error") }, warning = function(w) WRN «- w, error = function(e) ERR «- e ) rm(ERR, WRN) tryCatch( { stop("Error") warning("Warning") }, warning = function(w) WRN «- w, error = function(e) ERR «- e )

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта