红宝石 |异常类及其方法
异常是在程序执行期间(即在运行时)发生的不希望的或意外事件,它破坏了程序指令的正常流程。在 Ruby 中,Exception 类的后代用于在 begin 或 end 块中的raise方法和救援语句之间进行接口。
异常对象携带有关异常的信息,例如其类型、可选的描述性字符串和可选信息。
Ruby Exception 的内置子类是:
异常类方法
- exception :此方法用于创建并返回一个新的异常对象。
Exception.exception(message)
- 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
- 输出:
This is custome Exception
My object
- backtrace :此方法返回与exc相关的任何回溯。回溯是包含filename:line:in方法或filename:line的字符串数组。
- backtrace :此方法返回与exc相关的任何回溯。回溯是包含filename:line:in方法或filename:line的字符串数组。
exc.backtrace
- 例子:
红宝石
# 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
- 输出:
(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>
- 例外:没有参数,或者如果参数与接收者相同,则返回接收者。否则,创建与接收者相同类的新异常对象,但消息等于字符串.to_str 。
exc.exception(message)
- message :此方法返回与exc相关的消息。
exc.message
- set_backtrace :该方法设置exc相关的回溯信息。 this 的参数必须是 String 对象的数组,格式在Exception#backtrace中描述。
exc.set_backtrace(array)
- to_s :此方法返回与exc相关的消息,如果没有设置消息,则返回异常的名称。
exc.to_s
- 例子:
红宝石
# 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
- 输出:
Ruby Exception
- inspect :此方法返回异常的类名和消息。
exc.inspect
- Cause :此方法在exc引发时返回上一个异常。
- == :如果对象和exc共享相同的类、消息和回溯,则此方法返回 true。否则,它返回 false。
exc==obj