Какие механизмы существуют для нарушения работы отдельной части проекта?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
-
Исключения (Exceptions): Позволяют остановить выполнение кода при возникновении ошибки и передать управление блокам
begin/rescue/ensure.begin # Код, который может вызвать ошибку result = 1 / 0 rescue ZeroDivisionError => e # Обработка специфической ошибки puts "Ошибка деления на ноль: #{e.message}" # Возможно, логирование или альтернативное выполнение rescue StandardError => e # Обработка других стандартных ошибок puts "Произошла другая ошибка: #{e.message}" ensure # Код, который выполняется всегда, независимо от наличия ошибки puts "Завершение блока" end -
Raise: Явное возбуждение исключения, как для стандартных, так и для пользовательских классов ошибок.
# Обычное возбуждение исключения raise "Что-то пошло не так" # Возбуждение с конкретным классом ошибки raise MyCustomError, "Недопустимое значение" -
exit,abort,Kernel#exit!: Методы для завершения выполнения программы.exit!завершает программу немедленно, без вызова обработчиковat_exit.# Обычное завершение программы exit(0) # 0 - успешное завершение # Завершение с ошибкой abort("Завершение из-за критической ошибки") # Принудительное завершение Kernel.exit!(1) -
Thread#raise: Позволяет возбудить исключение в другом потоке выполнения.
thread = Thread.new do begin loop { sleep 1 } rescue => e puts "Поток перехвачен: #{e.class}" end end sleep 2 thread.raise StandardError, "Остановка потока" thread.join -
Программные ошибки (логические, синтаксические): Неправильно написанный код может привести к сбоям выполнения.
# Синтаксическая ошибка (отсутствует end) def my_method puts "Hello" # Логическая ошибка (бесконечный цикл) while true puts "Loop" end -
Сигналы операционной системы (SIGTERM, SIGINT и др.): Могут прервать выполнение программы извне.
# Простой пример обработки сигнала SIGINT (Ctrl+C) Signal.trap("INT") { puts "\nПерехвачен SIGINT. Завершение..."; exit } loop { sleep 1 } -
Assertions (особенно при разработке и тестировании): Механизмы проверки условий, при нарушении которых выбрасывается исключение или выполняется другое действие. В Ruby часто реализуются с помощью библиотек для тестирования.
# Пример с использованием библиотеки MiniTest require 'minitest/autorun' class MyTest < Minitest::Test def test_division # Утверждение: результат деления 4 на 2 равен 2 assert_equal 2, 4 / 2 # Утверждение: деление на ноль должно вызывать исключение ZeroDivisionError assert_raises(ZeroDivisionError) { 1 / 0 } end end