文档章节

Ruby 中的异常知识点总结

穿山
 穿山
发布于 2017/11/16 17:36
字数 521
阅读 10
收藏 0
# 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 = 0

def bar x
  if x == 0
    raise MyError,'this is my error' # 抛出异常 以及信息
  end
end

begin
  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)
  end
end

foo

# 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)
end

begin
  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

 

© 著作权归作者所有

穿山
粉丝 9
博文 33
码字总数 18655
作品 0
南京
私信 提问
知识总结:Java的21个技术点

关于Java的编程知识,有人会问哪几个是重要的知识点,不知道大家是否知道呢?给大家分享一下! 1、JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很...

牛客网
2017/12/21
0
0
我是如何准备 Android 技术面试的~

一、前言 这两个月听的最多的两个词就是 寒冬 和 裁员,作为被裁大军中的一员,我的关键词就是 遗憾 和 还好。 遗憾 的是现在的项目还有很多想象的空间,但是就要走向尽头;还好 的是毕业几年...

泽毛
2018/12/31
0
0
游戏开发与程序设计知识总结03——算法

更新日志 每此对思维导图有改动或者在github中有了对应的实现,则增加一条更新日志。 2017.9.2: 确定更新为系列文章并持续维护 前言 这是游戏开发与程序设计知识总结系列文章的第三篇算法,...

kashiwa
2017/09/02
0
0
《吴恩达 - 机器学习 - 笔记》文集小结

该系列文章为,观看“吴恩达机器学习”系列视频的学习笔记。虽然每个视频都很简单,但不得不说每一句都非常的简洁扼要,浅显易懂。非常适合我这样的小白入门。 这里笔者要絮絮叨叨一番: 其实...

tomas家的小拨浪鼓
03/17
0
0
调查显示编程语言 Ruby 在缓慢衰落,缺少爆发点

调查显示编程语言 Ruby 在缓慢衰落,缺少爆发点 程序师2017-12-184 阅读 ruby业界观察 Ruby 虽然仍然是 Engine Yard 和 Heroku 等产品的核心,以及 Discourse、Homebrew 和 Vagrant 等项目背...

程序师
2017/12/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Podman 使用指南

> 原文链接:Podman 使用指南 Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podman 没有 daemon。以前使用 Docker...

米开朗基杨
50分钟前
5
0
拯救 项目经理个人时间的5个技巧

优秀的项目经理都有一个共同点,那就是良好的时间管理能力。专业的项目经理会确保他们的时间投入富有成效,尽可能避免时间浪费。 时间管理叫做GTD,即Getting Things Done——“把事情做完”...

Airship
今天
6
0
LNMP环境介绍,Mariadb安装,服务管理,mariadb安装3

LNMP环境介绍 Nginx 处理的请求有两种,分为 静态与动态 图片,js,css,视频,音频,flash 等都是静态请求,这些数据都不是保存在数据库里面的 动态请求一般来说,需要的数据是在数据库里面...

doomcat
今天
1
0
前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
7
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部