Ruby 捕捉和抛出异常

Ruby 捕捉和抛出异常

异常 是Exception类的一个对象或该类的一个子对象。当程序在执行过程中达到一个没有定义的状态时,就会发生异常。现在程序不知道该怎么做,所以它引发了一个异常。这可以由Ruby自动完成,也可以手动完成。 Catch和Throw 是类似于提高和救援的关键字,在Ruby中也可以用catch和throw关键字来处理异常。Throw关键字会产生一个异常,每当它被满足时,程序控制权就会转到catch语句。

语法

catch :lable_name do
# matching catch will be executed when the throw block encounter

throw :lable_name condition
# this block will not be executed

end

catch块被用来从嵌套块中跳出,该块被标上了一个名字。这个块在遇到抛出块之前一直正常工作,这就是为什么使用catch和throw而不是raise或repair。

例子 #1 :

# Ruby Program of Catch and Throw Exception
gfg = catch(:divide) do
  # a code block of catch similar to begin
    number = rand(2)
    throw :divide if number == 0
    number # set gfg = number if
    # no exception is thrown
end
puts gfg

输出:


在上面的例子中,如果数字是0,那么就会抛出异常:divide,它没有向catch语句返回任何东西,结果是””被设置为gfg。

例子#2: 用默认值抛出。

在上面的例子中,当异常被抛出时,变量gfg的值被设置为””。我们可以通过向throw关键字传递默认参数来改变这一情况。

# Ruby Program of Catch and Throw Exception
gfg = catch(:divide) do
  # a code block of catch similar to begin
    number = rand(2)
    throw :divide, 10 if number == 0
    number # set gfg = number if
    # no exception is thrown
end
puts gfg

输出:

10

在上面的例子中,如果数字是0,我们得到10。如果数字是1,我们得到1。

例子3: 嵌套结构体的例子,这里我们将看到我们如何跳出嵌套结构体。

# Ruby Program of Catch and Throw Exception
gfg = catch(:divide) do
  # a code block of catch similar to begin
    100.times do
      100.times do
        100.times do
          number = rand(10000)
          # comes out of all of the loops 
          # and goes to catch statement
          throw :divide, 10 if number == 0
        end
      end
    end
    number # set gfg = number if
    # no exception is thrown
end
puts gfg

输出:

10

如果数字是0,甚至在循环中的一次,我们得到10,否则我们得到的数字。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程