我试图了解Ruby中的异常,但我有些困惑。我正在使用的教程说,如果发生的异常与救援语句标识的任何异常都不匹配,则可以使用“else”来捕获它:
begin
# -
rescue OneTypeOfException
# -
rescue AnotherTypeOfException
# -
else
# Other exceptions
ensure
# Always will be executed
end
但是,我稍后还会在教程“救援”中看到没有指定异常(exception)的情况:
begin
file = open("/unexistant_file")
if file
puts "File opened successfully"
end
rescue
file = STDIN
end
print file, "==", STDIN, "\n"
如果可以这样做,那么我是否需要使用其他方法?还是我可以像这样在最后使用通用救援?
begin
# -
rescue OneTypeOfException
# -
rescue AnotherTypeOfException
# -
rescue
# Other exceptions
ensure
# Always will be executed
end
最佳答案
else
适用于块完成而没有引发异常的情况。无论块是否成功完成,ensure
都会运行。例:
begin
puts "Hello, world!"
rescue
puts "rescue"
else
puts "else"
ensure
puts "ensure"
end
这将打印
Hello, world!
,然后else
,然后ensure
。