Поймать "не может быть статистика: нет такого файла или каталога" ошибка в Ruby - PullRequest
0 голосов
/ 10 января 2019

Я копирую файл из одного каталога в другой, используя / bin / cp /. Если файл не существует в исходном каталоге, компилятор выдает эту ошибку:

/ bin / cp: невозможно указать `путь / к / файлу ': такого файла или каталога нет

Я хочу перехватить эту ошибку, чтобы отобразить свое сообщение об ошибке.

begin
  `/bin/cp /path/to/file /current/directory/`   
rescue
  print("File was not found")   
  exit 1;
end

Но контроль никогда не идет на помощь. Он все еще печатает ошибку, упомянутую выше.

1 Ответ

0 голосов
/ 10 января 2019

Основная ошибка заключается в том, что вы делаете системный вызов, и системный вызов не собирается выдавать вам исключение при сбое.

Так что вы можете сделать это

#!/bin/env ruby

require 'fileutils'

begin
  FileUtils.cp '/path/to/file', '/current/directory/'
rescue Errno::ENOENT
  print('File was not found')
  exit 1
end

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

если вы все еще пытаетесь сделать это с помощью системного вызова, вы можете сделать что-то вроде этого

#!/bin/env ruby

unless system('/bin/cp /path/to/file /current/directory/ 2> /dev/null')
  puts 'my custom error'
  exit(1)
end

но довольно уродливо, и вы теряете контроль, если хотите управлять многими ошибками (например, не осталось места)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...