Необработанные исключения в Ruby - PullRequest
2 голосов
/ 27 сентября 2019

Я работаю над проектом ruby ​​впервые.У меня есть все, что мне нужно для работы, за исключением того, что я хочу иметь возможность зарегистрировать необработанный обработчик исключений, чтобы я мог инициировать что-то, если происходит сбой, который не обрабатывается спасателем, но я не вижу, возможно ли это.

Я сделал со многими другими языками, как в Python, я сделал следующее:

sys.excepthook = MyClass._unhandledCrashHandler

Я не могу найти эквивалента для этого в Ruby.Возможно ли это?

Следует упомянуть, что я пишу библиотеку Ruby, поэтому идея состоит в том, что, когда основное приложение ruby ​​инициализирует мою библиотеку, библиотека устанавливает обработчик обработанного исключения, а затем, если основное приложение аварийно завершает работу.Библиотека получает сбой.Это то, что я сделал на python и многих других языках без проблем, но не вижу никакого способа сделать это в Ruby.

1 Ответ

0 голосов
/ 27 сентября 2019

Ruby не имеет общих обработчиков, но вместо этого вы оборачиваете код, который может генерировать исключения.Например:

begin
  # ... Do stuff
rescue => e
  $stderr.puts("[%s] %s" % [ e.class, e ])
  $stderr.puts(e.backtrace.join("\n"))
end

Где это спасает все стандартные исключения и отображает некоторые диагностические результаты.Вы можете делать все что угодно в блоке rescue.Любые неперехваченные исключения автоматически всплывают на ваш верхний уровень.

Это должен быть код верхнего уровня для вашего приложения на Ruby.

Самое близкое к тому, о чем вы говорите в Rubyэто обработчик at_exit, который вы можете определить, но он работает в каждом сценарии выхода, а не только в необработанных исключениях.

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