Обработка исключений - PullRequest
       1

Обработка исключений

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

Я использую гем 'rubyoverflow' в рельсах:

begin
  puts "=== 1 ==="
  qt = Questions.retrieve_by_tag(tag).questions
  puts "=== 2 ==="
rescue
  puts "=== 3 ==="
end

Но иногда я получаю сообщение об ошибке на консоли:

не удалось проанализировать YAML в строке 843 столбца 4

C: /Ruby192/lib/ruby/1.9.1/psych.rb: 148: в parse' C:/Ruby192/lib/ruby/1.9.1/psych.rb:148:in parse_stream '... rubyoverflow (1.0.1) lib / rubyoverflow.rb: 86: в request' ... C:/Ruby192/lib/ruby/1.9.1/webrick/server.rb:183:in блоке в start_thread '

Но вопрос не об ошибке в геме, а об обработке исключений. Я получаю в консоли только строку:

  puts "=== 1 ==="

но не строки

  puts "=== 2 ==="
  puts "=== 3 ==="

почему

Как мне восстановить действие моей программы, если строка

  qt = Questions.retrieve_by_tag(tag).questions

провалится?

1 Ответ

2 голосов
/ 01 апреля 2011

По умолчанию rescue прерывает StandardError и все, что от него наследуется.

С Документы :

По умолчанию функция спасения перехватывает только StandardError и его потомков ...

Возникающее исключение, вероятно, не так, поэтому спасение не справляется с этим.

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

rescue Exception => e
  print e.to_s
end

, чтобы увидеть, что такое исключение, затем замените Exception на это значение.

Более подробная информация в Интернете, но вот фрагмент кода, чтобы распечатать список исключений .

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