ruby 异常处理:ensure
当一个方法结束工作时我们也许需要进行清理工作.也许一个打开的文件需要关闭,缓冲区的数据应清空等等.如果对于每一个方法这里永远只有一个退出点,我们可以心安理得地将我们的清理代码放在一个地方并知道它会被执行;但一个方法可能从多个地方返回,或者因为异常我们的清理代码被意外跳过.
begin
file = open("/tmp/some_file", "w")
# ... write to the file ...
file.close
end
上面,如果在我们写文件的时候发生异常,文件会保留打开.我们也不希望这样的冗余出现:
begin
file = open("/tmp/some_file", "w")
# ... write to the file ...
file.close
rescue
file.close
fail # raise an exception
end
这是个笨办法,当程序增大时,代码将失去控制,因为我们必须处理每一个 return 和 break,.
为此,我们向"begin...rescue...end"体系中加入了一个关键字 ensure. 无论begin块是否成功,ensure代码域都将执行.
begin
file = open("/tmp/some_file", "w")
# ... write to the file ...
rescue
# ... handle the exceptions ...
ensure
file.close # ... and this always happens.
end
可以只用ensure或只用rescue,但当它们在同一begin...end域中时, rescue 必须放在 ensure前面.
相关推荐
-
ruby 异常处理:rescue
一个运行着的程序常会遇到意外的问题.一个要读取的文件不存在;当希望存入一些数据时磁盘满了;用户可能输入不恰当的数据. ruby> file = open("some_file") ERR: (eval):1:in `open': No such file or directory - some_file 一个健壮的程序会合理并漂亮的处理这些问题.面对那些异常是一件讨人厌的工作.C程序员被要求做到检查每一个可能导致错误发生的系统调用的返回值并立刻做出决定. FILE *file =
-
Ruby中的异常处理代码编写示例
单个异常使用 fail 关键字仅仅当捕获一个异常并且反复抛出这个异常(因为这里你不是失败,而是准确的并且故意抛出一个异常). begin fail 'Oops' rescue => error raise if error.message != 'Oops' end 不要为 fail/raise 指定准确的 RuntimeError. # bad fail RuntimeError, 'message' # good - signals a RuntimeError by default fai
-
详解Ruby中的异常
异常和执行总是被联系在一起.如果您打开一个不存在的文件,且没有恰当地处理这种情况,那么您的程序则被认为是低质量的. 如果异常发生,则程序停止.异常用于处理各种类型的错误,这些错误可能在程序执行期间发生,所以要采取适当的行动,而不至于让程序完全停止. Ruby 提供了一个完美的处理异常的机制.我们可以在 begin/end 块中附上可能抛出异常的代码,并使用 rescue 子句告诉 Ruby 完美要处理的异常类型. 语法 begin # - rescue OneTypeOfException #
-
ruby 异常处理:ensure
当一个方法结束工作时我们也许需要进行清理工作.也许一个打开的文件需要关闭,缓冲区的数据应清空等等.如果对于每一个方法这里永远只有一个退出点,我们可以心安理得地将我们的清理代码放在一个地方并知道它会被执行;但一个方法可能从多个地方返回,或者因为异常我们的清理代码被意外跳过. begin file = open("/tmp/some_file", "w") # ... write to the file ... file.close end 上面,如果在我们
-
Terry七月Ruby读书笔记(比较详细)第1/4页
Page 3 概述 ¨ 解释执行:Python,Ruby,交互性很好: ¨ 编译执行:Pascal, C,速度较快. n 本地执行,如C,C++: n 虚拟机执行,如Java, C#. ¨ 动态语言,如JavaScript,Ruby: ¨ 静态语言,如C++,Java. 语言 ¨ 语法 关键字 ¨ 语义 ¨ 语用 松本行弘(Matz) 1993 Ruby
-
用实际代码演示Ruby的容易被误解的6个特性
简介: 假设您是一名 C++ 开发人员,您需要使用 Ruby 快速执行一些原型设计.当您拿起一本 Ruby 参考书籍(比如 Pickaxe)或浏览 Ruby 网站时,会看到一些熟悉的构造,比如类声明.线程支持和异常处理.正当您认为自己了解 Ruby 的工作原理之时,您意识到了,您 Ruby 代码中的并发机制与 Boost 线程工作原理不一样,catch 和 throw 也与它们看上去的大不相同,而且其他人在其 Ruby 脚本中各处使用了名为 self 的关键词.欢迎来到 Ruby 的世界中! 如
-
初步了解一下什么是ruby
关键字 def undef 方法定义 module 模块定义 class 类定义 defined? 检查类型 条件语句 if,then,else,elsif,case,when,unless 循环语句 for ,in,while,until,next,break,do,redo,retry,yield 逻辑判断 not ,and ,or 逻辑或空值 true,false,nil 异常处理 rescue,ensure 对像引用super ,self 嵌入模块BEGIN END 块的起始 begin
-
Ruby多线程库(Thread)使用方法详解
Thread是Ruby的线程库,Thread库已经内置在Ruby中,但如果想要使用线程安全的Queue.Mutex以及条件变量等,则需要手动require 'thread'. 主线程main 默认情况下,每个Ruby进程都具备一个主线程main,如果没有创建新的线程,所有的代码都将在这个主线程分支中执行. 使用Thread.main()类方法可获取当前线程组的主线程,使用Thread.current()可以获取当前正在执行的线程分支.使用Thread.list()可获取当前进程组中所有存活的线程
-
CentOS 7下配置Ruby语言开发环境的方法教程
本文跟大家分享的是在CentOS 7下配置Ruby语言开发环境的方法教程,分享出来供大家参考学习,下面来看看详细的介绍: 安装Ruby 2.2 CentOS7存储库中的Ruby版本为2.0,但如果需要,可以使用RPM软件包安装2.2 1.添加CentOS SCLo软件集合存储库 [root@linuxprobe ~]# yum -y install centos-release-scl-rh centos-release-scl # set [priority=10] [root@linuxpr
-
详解Ruby中的循环语句的用法
Ruby 中的循环用于执行相同的代码块若干次.本章节将详细介绍 Ruby 支持的所有循环语句. Ruby while 语句 语法 while conditional [do] code end 当 conditional 为真时,执行 code.while 循环的 conditional 通过保留字 do.一个换行符.反斜线 \ 或一个分号 ; ,来与 code 分离开. 实例 #!/usr/bin/ruby $i = 0 $num = 5 while $i < $num do puts("
随机推荐
- Java8新特性Stream流实例详解
- ASP 信息提示函数并作返回或者转向
- 如何在iphon IOS设备上使用二维码
- javascript 中模板方法单例的实现方法
- 实例详解JavaScript中setTimeout函数的执行顺序
- JS新包管理工具yarn和npm的对比与使用入门
- PHP 根据IP地址控制访问的代码
- 详解nodeJS中读写文件方法的区别
- C#反射(Reflection)对类的属性get或set值实现思路
- python模拟登录百度代码分享(获取百度贴吧等级)
- javascript 缓冲运动框架的实现
- ruby元编程实际使用实例
- jQuery关键词说明插件cluetip使用指南
- 基于JS实现移动端向左滑动出现删除按钮功能
- 详解Android文件存储
- C#多线程之Thread中Thread.IsAlive属性用法分析
- python 拷贝特定后缀名文件,并保留原始目录结构的实例
- react同构实践之实现自己的同构模板
- react项目如何使用iconfont的方法步骤
- Android Intent传递数据大小限制详解