Возможно ли в Ruby вызвать исключение, которое также автоматически прервет программу, игнорируя любые вложенные блоки начала/спасения?
Как прервать скрипт Ruby при возникновении исключения?
Ответы (4)
К сожалению, ни один из этих exit
ответов не сработает. exit
делает рейз SystemExit
, который можно поймать. Наблюдать:
begin
exit
rescue SystemExit
end
puts "Still here!"
Как говорит @dominikh, вместо этого вам нужно использовать exit!
:
begin
exit!
rescue SystemExit
end
puts "Didn't make it here :("
person
Lee Jarvis
schedule
04.03.2012
Хотя это и не имеет прямого отношения к этому вопросу, читатели должны отметить, что
exit!
также имеет побочный эффект отсутствия обработки блоков at_exit
или END
, что может привести к некоторым царапинам в голове в определенных ситуациях :-)
- person Peter Cooper; 04.03.2012
Эду уже спрашивал: Если вы хотите прервать программу, почему бы не перейти прямо к ней и не использовать «выход»
Одна возможность: вы можете определить свое собственное исключение, и когда исключение вызывается, исключение останавливает программу с выходом:
class MyException < StandardError
#If this Exception is created, leave programm.
def initialize
exit 99
end
end
begin
raise MyException
rescue MyException
puts "You will never see meeeeeee!"
end
puts "I will never get called neither :("
person
knut
schedule
03.03.2012
Будет ли это делать то, что вы хотите?
begin
puts Idontexist
rescue StandardError
exit
puts "You will never see meeeeeee!"
end
puts "I will never get called neither :("
person
Maran
schedule
03.03.2012
Мой ответ похож на ответ Марана, но немного отличается:
begin
puts 'Hello'
# here, instead of raising an Exception, just exit.
exit
puts "You will never see meeeeeee!"
rescue # whatever Exception
# ...
end
puts "I will never get called neither :("
person
Sony Santos
schedule
03.03.2012
SystemExit
: gist.github.com/fa5ce273ba27823d0003 - person Lee Jarvis   schedule 04.03.2012