Обработка Руби "не удалась с ...." - PullRequest
0 голосов
/ 26 апреля 2011
def slicer_imlib2(zoom_level, file_path, output_path)
    begin
      tile_size = 256
      file_path = "public/#{file_path}"

      image = Imlib2::Image.load_image file_path

      image_width = image.width
      image_height = image.height
.....
....
    end
      end
      image = nil
    rescue
      return false
    else
      return true
    end
end

Начальные блоки спасения не работают

Я получаю

[Worker()] UserImage#slice_lib failed with Imlib2::Error::DeletedError: image deleted - 0 failed attempts
[Worker()] UserImage#slice_lib failed with Imlib2::Error::DeletedError: image deleted - 0 failed attempts
[Worker()] UserImage#slice_lib failed with Imlib2::Error::DeletedError: image deleted - 0 failed attempts
[Worker()] 3 jobs processed at 32.5508 j/s, 3 failed ...

Я пытаюсь вернуть false, если я получаю Imlib2 :: Ошибка :: DeletedError: изображение удалено

Ответы [ 2 ]

1 голос
/ 26 апреля 2011

Попробуйте

begin
  # ...
rescue Imlib2::Error::DeletedError
  # ...
else
  # ...
end

Функция спасения (без указания ErrorClass) перехватывает только StandardErrors (Imlib2 :: Error :: DeletedError напрямую наследует от Exception).

0 голосов
/ 26 апреля 2011

J -_- L дает вам хороший ответ, но я просто хотел сказать что-то на стороне практики, которое может спасти вас от некоторых хлопот.

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

Исключение обычно следует использовать НЕ для обработки пользовательского ввода, а для поиска странных вещей. Например, метод, который ожидает аргумент равным 1 или 0, неожиданно получает 2 в качестве входных данных. Это было бы правильное место обработки исключений.

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