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 ответов

11 просмотров

На самом деле в вашем случае сначала генерируется 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 )

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта