异常处理: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