博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ruby 中的异常知识点总结
阅读量:6092 次
发布时间:2019-06-20

本文共 1507 字,大约阅读时间需要 5 分钟。

hot3.png

# 1 异常发生后 程序会暂时停止运行 并寻找是否有对应的异常处理程序# 2 在Ruby中 异常也是对象 在rescue后指定变量名 可以获得异常对象# 3 异常对象的方法有 class message backtrace# 4 Ruby中的ensure相当于Java中的finally# 5 在Ruby中 指定retry时候一定要当心死循环# 例子 判断 字符串 是否为数值形式puts n = Integer('123') rescue 0# 6 如果整个方法内的程序都用begin ~ end括起来的话 则可省略 begin ~ end 直接写rescue 与 ensure# 7 也可在类定义中使用 rescue 和 ensure 但是不推荐  因为有异常发生后 异常发生位置之后的方法就不再执行了# 8 Ruby中所有异常都是Exception类的子类# 9 RunTimeException 官方定义是无效的操作会返回RunTimeException# 10 rescue中指定的异常种类就是异常类类名 rescue不指定异常类时# 返回RunTimeException 默认捕捉StandardError类及其子类# 11 自定义异常 一般会先定义继承StandError 然后再继承这个新类MyError = Class.new(StandardError)a = 0def bar x  if x == 0    raise MyError,'this is my error' # 抛出异常 以及信息  endendbegin  bar(0)rescue MyError => e  puts e.class # 异常类型为MyError  puts e.class.superclass # 父类为StandardError  puts e.message # 信息为'this is my error'  puts e.backtrace# '打印了 堆栈信息'  puts '发生异常啦'end# 12 带有claller的效果与backtrace 相似def foo  begin    raise TypeError, 'Boom in foo', caller  rescue =>e    puts e.send(:caller)  endendfoo# 12 例def factorial(n)  raise TypeError unless n.is_a?(Integer) #如果不是Integer类型则raise TypeError  raise ArgumentError if n < 1  return 1 if n == 1  n*factorial(n - 1)endbegin  x = factorial(12)rescue TypeError => e  puts 'pls input Integer'rescue ArgumentError => e  puts 'pls input >0'else  puts "正常输出结果#{x}" #如果抓取到了异常则else中的不执行了ensure  puts 'processed'end# 13 异常的传播机制# 1 先是包含他block 的rescue# 2 没有的话 包含 block 的 block 有没有rescue# 3 没有的话看 block的caller# 4 他caller的caller

 

转载于:https://my.oschina.net/u/3544267/blog/1574651

你可能感兴趣的文章
[又拍云]云计算中又一架重要的马车
查看>>
Ruby on Rails 学习笔记(一)
查看>>
Linux下安装pymysql步骤
查看>>
PHP+MySQL数据库教程
查看>>
jQuery UI Datepicker 添加时分秒
查看>>
linux查看和终止进程
查看>>
Beyond Compare比较表格小技巧
查看>>
以太坊·代币开发详解
查看>>
LibreOffice 中文版安装指南
查看>>
c++中调用c代码的3 种方法
查看>>
ISO C 标准定义的头文件
查看>>
nginx配置
查看>>
joomla1.5前台组件开发过程分享(附中文开发教程两本)
查看>>
Sharepoint 2013企业内容管理学习笔记(二) 全自动化内容管理
查看>>
DateDiff()倒计时
查看>>
c++11新特性--decltype auto
查看>>
RawCap
查看>>
screen命令的最常见的使用方法
查看>>
我的友情链接
查看>>
Erlang教程
查看>>