ruby全部异常

在此输入图片描述

异常处理:begin .. rescue .. else .. ensure .. end ,能够使用$!去格式化错误信息,else会出如今rescue子句和任何一个ensure子句以前,else中的程序只有在block中没有出现任何异常是才会执行,如:java

<!-- lang: ruby -->
begin
    ...
rescue SystemCallError
    print "IO failed: " + $!
    ...
else
    ... #begin else之间的代码没有出现任何异常才执行
ensure #相似与java中的finally
    
end

有多个rescue子句,rescue的结束处能够提供一个局部变量来接受匹配的异常。如:ruby

<!-- lang: ruby -->
begin
    ...
rescue SyntaxError, NameError => e
    print e
end

系统错误均是SystemCallError的子类,见上图,定义在Errno模块中,每一个Errno对象都有一个Errno类常量,要比较SystemCallError的两个子类,是比较他们的错误码Errno::EAGAIN::Errno,若两个子类的错误码相同,则这两个异常在rescue中被同等对待,rescue其中一个,另外一个也会被rescuecode


引起异常对象

<!-- lang: ruby -->
#引起当前异常($!),若是当前没异常的话,引起RuntimeError
raise
#建立新的RuntimeError异常,把它的消息设置为指定的字符串
raise "bad mp3 encoding"
#建立异常 相关联的消息设置 栈信息(能够是任何对象,一般使用Kernel.caller方法产生栈信息)
raise InterfaceException, "KeyBoard failure", caller
相关文章
相关标签/搜索