Ruby Exception
begin
#可能发生异常的地方
rescue
#如何处理异常
end
rescue,哈哈,太有爱的一个单词了。。。
begin
#可能发生异常的地方
rescue => exception
#如何处理异常
end
这样一来,exception就可以用来存放异常对象了。
$!:用来存放最后一次发生的异常对象
$@:异常发生的位置等信息。
异常对象的方法:
class:例外的类别
message: 例外的消息
backtrace: $@等同于$!.backtrace,异常发生的位置信息
更加完善的异常处理
begin
#process
rescue => ex
#process on ex
ensure
#无论如何都会执行的动作
end
※在ensure中可以使用retry,他会重新去执行begin中的内容,如果没有强制退出则一直执行。
rescue可以像if, unless一样使用如下形式:
n = Integer(val) rescue 0 #跟上面同样的效果 begin n = Integer(val) rescue n = 0 end
如果val不是一个数字类型的字符串的话,n就等于0。
按照异常分类处理
begin
#process
rescue Exception1, Exception2 => ex
#process on ex
rescue Exception3, Exception4 => ex2
#process on ex2
rescue => ex3
#process on other kinds of exceptions
end
StandardError
这个类是Exception的自类,Exception还有其他的子类。但是rescue补救的知识StandardError类或者是其子类。
于是我们设计自己的异常的时候,需要首先继承这个StandardError。
class VoctralsError < StandardError; end
然后,其它的类可以继承这个VoctralsError类。
class Error1 < VoctralsError; end
引发异常raise
raise "Error Information" #产生一个RuntimeError,"Error Information"作为异常的message;
raise SomeException #产生一个SomeException
raise SomeException, "Error Information" #产生一个SomeException,并设定其message为"Error Information"
raise
1)写在rescue之外,直接引发一个RuntimeError;
2)写在rescue内,再次引发导致该rescue发生的异常($!)。
throw和catch
catch(:some){
#something before a :some throw
throw :some
#something after a :some throw
}
catch能够保证:some之前的代码顺利进行,当出现:some被throw之后,后面的代码不会执行。
看起来类似if。
但是可以用这个来打断一个多层循环:
catch(:test){
loop{
loop{
...
if val != 0
throw :test, val
end
}
}
throw有两个参数的时候,第二个参数作为catch的返回值。
Ruby Exception的更多相关文章
- ruby : Exception Notification
https://github.com/smartinez87/exception_notification#sections Add the following line to your applic ...
- 《ruby编程语言》笔记2 对象
ruby是一门非常纯粹的面向对象的语言:所有值都是对象,而且没有基本类型(primitive type)和对象类型的区别,这一点不同于其他语言.在Ruby中,所有对象都继承一个Object类,而且共享 ...
- 【原创】大数据基础之Logstash(3)应用之file解析(grok/ruby/kv)
从nginx日志中进行url解析 /v1/test?param2=v2¶m3=v3&time=2019-03-18%2017%3A34%3A14->{'param1':' ...
- 1月10日 ruby基础教程,查漏补缺; 2月22日 Exception补充
https://ruby-doc.org/core-2.5.0/Exception.html 1月20日练习完1,2章. 第一章 初探 ‘’单引号不执行转义符. \t 制表符.\n 换行符. p me ...
- Ruby的require相关知识
1. 在调用require xxx之前,需要确定xxx这个gem已经安装过了(使用gem install xxx,安装位置可以使用gem env列出),或者xxx是Ruby内置的标准函数库(StdLi ...
- ruby + watir 自动化上传图片文件解决方案
watir自动化捕获上传图片元素: require 'watir' include Watir require 'test/unit' class TC_recorded < Test::Uni ...
- ruby Errors & Exceptions
When you first started coding, errors were probably the last thing you wanted to see. After all, it’ ...
- 【ruby】ruby基础知识
Install Ruby(安装) For windows you can download Ruby from http://rubyforge.org/frs/?group_id=167 for L ...
- Ruby 多线程探索实践与归纳总结
Ruby 多线程 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程. 线程是程序中一个单一的顺序控制流程,在单个程序中同时运行多个线程完成不同的工作,称为多线程. Ruby 中我们可以通 ...
随机推荐
- mysql 获得当前月1号的日期 和 0点日期方法
day)) 当月0点时间:2015-12-01 00:00:00 day)) 当月1号时间:2015-12-01 10:45:22 day) 2015-12-01 <!-- 查询上月债权额度 - ...
- 决策树模型 ID3/C4.5/CART算法比较
决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...
- typeof、offsetof、container_of的解释
链表是内核最经典的数据结构之一,说到链表就不得不提及内核最经典(没有之一)的宏container_of. container_of似乎就是为链表而生的,它的主要作用是根据一个结构体变量中的一个域成员变 ...
- Xen虚拟机磁盘镜像模板制作(二)—Windows Server 2008(2012)
在<Xen虚拟机磁盘镜像模板制作(一)—Windows Server 2008(2012)>一文中,我们已经成功制作出了Windows Server磁盘镜像.下面我们说明下如何通过它来生成 ...
- Sublime text2如何设置快捷键让编写的HTML文件在浏览器预览?
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:浪人链接:http://www.zhihu.com/question/27219231/answer/43608776来源:知 ...
- 关于 System.IO.FileAttributes 的 Reparse Points
关于Reparse Points找到下面的解释,要是能有更进一步的解释说明就更好了 Reparse Points其实是一个用户自定义的数据集合,它可以包含在一个文件或目录中.这种格式的数据能够被特定的 ...
- IIS 7.0 下 httpMoudle 失效的问题
在web.config里配置了: <system.web> <httpModules> <add type="DevExpress.Web.ASPxClass ...
- Windows 10触摸板手势
高級使用者試用 Windows 10 筆記本電腦的觸控板上的這些手勢: •選擇一項: 在觸控板上點擊. •滾動: 將兩根手指放在觸控板上,然後以水準或垂直方向滑動. •放大或縮小: 將兩根手指放在觸控 ...
- 2015GitWebRTC编译实录5
2015.07.20 libaudio_encoder_interface/libaudio_decoder_interface 编译通过将encoder,decoder两个lib合并了,后面需要看看 ...
- ZOJ 1101 Gamblers
原题链接 题目大意:一群人聚众赌博.每个人先分别押注不同的金额,可以相互借钱.开奖之后,如果某个人的押注的金额正好等于任何其他三个人金额总和,那这个人就赢得其他三个人的赌注.如果同时有两个以上的赢家, ...