📜  红宝石 |异常类及其方法

📅  最后修改于: 2022-05-13 01:55:47.127000             🧑  作者: Mango

红宝石 |异常类及其方法

异常是在程序执行期间(即在运行时)发生的不希望的或意外事件,它破坏了程序指令的正常流程。在 Ruby 中,Exception 类的后代用于在 begin 或 end 块中的raise方法和救援语句之间进行接口。
异常对象携带有关异常的信息,例如其类型、可选的描述性字符串和可选信息。
Ruby Exception 的内置子类是:

异常类方法

  1. exception :此方法用于创建并返回一个新的异常对象。
Exception.exception(message)
  1. new :此方法创建并返回一个新的异常对象,可选择将消息设置为消息。
Exception.new(message)
Ruby
# Ruby program to illustrate
# use of new method
 
# creating the customized class
# inherited from StandardError
class MyException < StandardError
  attr_reader :myobject
 
  def initialize(myobject)
    @myobject = myobject
  end
end
 
 
begin
 
# Using new method
# to create an object of
# the given exception
  raise MyException.new("My object"), "This is custome class"
rescue MyException => e
  puts e.message
  puts e.myobject
end


Ruby
# Ruby program to illustrate
# use of backtrace method
 
# defining method
def a1
 
# raise exception
raise "OOPs! exception raise"
end
 
# defining method
def a2
# calling method a1
a1()
end
 
begin
# calling method a2
a2()
# rescue exception
rescue => a_Details
 
# print the backtrace details
# related with exception
puts a_Details.backtrace.join("\n")
end


Ruby
# Ruby program to illustrate
# use of to_s method
 
begin
 
# raise exception
raise "Ruby Exception"
 
# rescue exception
rescue Exception => a
 
# print message
puts a.to_s
end


  1. 输出:
This is custome Exception
My object
    1. backtrace :此方法返回与exc相关的任何回溯。回溯是包含filename:line:in方法或filename:line的字符串数组。
exc.backtrace
  1. 例子:

红宝石

# Ruby program to illustrate
# use of backtrace method
 
# defining method
def a1
 
# raise exception
raise "OOPs! exception raise"
end
 
# defining method
def a2
# calling method a1
a1()
end
 
begin
# calling method a2
a2()
# rescue exception
rescue => a_Details
 
# print the backtrace details
# related with exception
puts a_Details.backtrace.join("\n")
end
  1. 输出:
(repl):8:in `a1'
(repl):14:in `a2'
(repl):19:in `
' /run_dir/repl.rb:38:in `eval' /run_dir/repl.rb:38:in `run' /run_dir/repl.rb:54:in `handle_eval' /run_dir/repl.rb:170:in `start' /run_dir/repl.rb:177:in `start' /run_dir/repl.rb:181:in `
' /pre>
  1. 例外:没有参数,或者如果参数与接收者相同,则返回接收者。否则,创建与接收者相同类的新异常对象,但消息等于字符串.to_str
exc.exception(message)
  1. message :此方法返回与exc相关的消息。
exc.message
  1. set_backtrace :该方法设置exc相关的回溯信息。 this 的参数必须是 String 对象的数组,格式在Exception#backtrace中描述。
exc.set_backtrace(array)
  1. to_s :此方法返回与exc相关的消息,如果没有设置消息,则返回异常的名称。
exc.to_s
  1. 例子:

红宝石

# Ruby program to illustrate
# use of to_s method
 
begin
 
# raise exception
raise "Ruby Exception"
 
# rescue exception
rescue Exception => a
 
# print message
puts a.to_s
end
  1. 输出:
Ruby Exception
  1. inspect :此方法返回异常的类名和消息。
exc.inspect
  1. Cause :此方法在exc引发时返回上一个异常。
  2. == :如果对象和exc共享相同的类、消息和回溯,则此方法返回 true。否则,它返回 false。
exc==obj