2015-07-08 8 views
-1

Так что я классический обработки рубин исключение:рубин обработка исключений в блоке еще

begin 
    # do work here 
rescue SafeShutdown => e 
    # prevent loss of data and safely shutdown 
rescue SystemExit => e 
    # print #{e} and continue 
else 
    # how can I get #{e} here to get error message 
    # so I can behave like in previous rescue 
    # 
    # print #{e} and continue 
end 

Мой вопрос заключается в том, как я могу получить «е», чтобы распечатать в регистраторе в остальное части блока.

+0

Как вы предлагаете получить доступ к исключению в предложении 'else', которое выполняется только в случае отсутствия исключения? –

ответ

2

В begin rescue блок else вызывается только тогда, когда не происходит никакого исключения, то есть ошибка не была выбрана. Попробуйте следующее:

begin 
    # do work here 
rescue SafeShutdown => e 
    # print e 
rescue SystemExit => e 
    # print e 
else 
    # this will only run when no exceptions are thrown 
ensure 
    # this will always run 
end 
+0

Я тогда действительно не получаю функцию «else» там, хотя, к примеру, для любого другого исключения ведет себя как по умолчанию. Я полностью неправильно понял поведение остальных в этом блоке. –

+0

Вы можете использовать 'rescue Exception => e', чтобы поймать все ошибки, но это очень не рекомендуется. Подробнее [здесь] (http://stackoverflow.com/questions/10048173/why-is-it-bad-style-to-rescue-exception-e-in-ruby) –

+0

Спасибо, что очень полезно ... :) –

 Смежные вопросы

  • Нет связанных вопросов^_^