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 中我们可以通 ...
随机推荐
- Core Java Volume I — 4.10. Class Design Hints
4.10. Class Design HintsWithout trying to be comprehensive or tedious, we want to end this chapter w ...
- SPAdes
用后感: 拼个小基因组还好,对于很大的基因组,文库很多的,还是不要用了.服务器768G内存,都不够用.... 主页: http://bioinf.spbau.ru/spades 说明书: http:/ ...
- 使用Matlab对灰度图像编程实现2D的傅里叶变换
1. 先载入一幅灰度图像,如下: (非灰度图) 2. 利用函数fft2,对其进行快速傅立叶变换, 并利用函数fftshift 将变换后的图像原点移动到频率矩形的中心. 3. 利用abs()函 ...
- JS初学之-代码精简思路
1.差不多的代码,观察其不一样的地方,使用变量存起来,方便替代. 2.将其存入函数之中方便调用.
- leetcode 40 Combination Sum II --- java
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...
- JavaWeb学习记录(六)——用户登录功能之Session与验证码验证功能的实现
一.产生验证码的工具类 package blank.util; import java.awt.Color;import java.awt.Graphics;import java.awt.image ...
- 课堂所讲整理:HTML--5JavaScript简介
一.JavaScript简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司 ...
- 【P1835】小红花
很简单的题,然而我没想到,在NOIP上怎么办嘛QAQ 话说这题不知道怎么分类啊……先扔到玄学里边把…… 原题: Fj在圣诞节来临之际,决定给他的奶牛发一些小红花.现在Fj一共有N头奶牛,这N头牛按照编 ...
- 谷歌浏览器chrome与firefox的冲突(未解之谜)
那年,公司开发了一套在线制作电子书的系统 e-textbook. 我负责小学电脑科教材在线题目的制作. 利用 ps制作剪裁好图片,导入系统,制作题目,并通知同事添加代码. 检测时,却发现有一道图片拖放 ...
- MySQL 用户与授权管理详解
大纲 一.前言 二.创建用户并授权 三.GRANT语句的种类 四.撤权并删除用户 一.前言 做为Mysql数据库管理员管理用户账户,是一件很重要的事,指出哪个用户可以连接服务器,从哪里连接,连接后能做 ...