我试图了解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

10-05 18:33