Chinaunix首页 | 论坛 | 博客
  • 博客访问: 322472
  • 博文数量: 64
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 1972
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-31 21:53
个人简介

文明之精神,野蛮之体魄。

文章分类
文章存档

2015年(4)

2013年(60)

我的朋友

分类: Python/Ruby

2013-05-09 10:25:44

一、      异常概述

1.    一个健壮的软件产品,应该能充分应对各种情况,而不是只能应对正常的情况。异常处理机制让程序按既定计划执行,当程序运行到无法运行的代码时,系统自动创建一个异常对象,该异常对象被提交给Ruby解释器,这个过程被称为引发异常。

二、      异常处理流程

1.    使用rescue捕捉异常。rescue用于指定一个异常处理块。当Ruby解释器遇到一个未处理的异常时,系统转入rescue指定的异常处理块。必须指出的是,即使我们为一段代码块指定多个异常处理块,也永远只有一个异常处理块被执行,永远是第一个匹配异常实例的rescue异常捕捉块获得执行,因此我们不要把一个异常父类的rescue块排在异常捕捉队列的前面。Ruby还允许我们获得系统引发的异常实例,我们可以采用“raise异常类=>实例名”的方式来获得引发的异常实例。

2.    Ruby程序中所有异常都是Exception类的子类,而Exception包含如下几个常用方法:backtrace:返回该异常关联的异常栈信息。new:创建一个异常实例。to_s/to_str/message:返回该异常实例里的message信息,如果该异常实例没有货的系统的异常实例,则返回该异常的类名。为了获得系统的异常实例,Ruby还提供了一个全局变量$!,这个全局变量保存了系统最近发生的异常对象;还提供了一个全局变量$@,它保存了发生异常的源代码位置。

3.    异常处理机制:如果一个方法在执行过程中出现异常,则系统立即在该方法内寻找对应的异常处理块,不管找到异常处理块与否,引发异常代码后面的代码将不会获得执行的机会。如果系统可以在该方法中找到对应异常处理块,则系统跳转到对应异常处理块,由异常处理块处理该异常,当异常处理块执行结束后,程序接着运行该方法内、异常处理块后面的代码。

4.    使用ensure回收资源。

5.    使用retry再次执行。当Ruby解释器在rescue部分遇到retry代码时,将跳回begin部分,再次执行业务功能部分。

三、      引发异常

1.    引发异常:采用Kernel模块中定义的raise方法来达到这个目的。语法格式如下:

2.    rescueraise同时使用。

四、      在程序定义中使用异常处理

1.    在类/模块定义中使用异常处理。如果我们在类定义中增加了异常处理流程,对该类里的方法没有任何帮助。

2.    在方法中定义异常处理。

阅读(1607) | 评论(0) | 转发(0) |
0

上一篇:Ruby面向对象(下)

下一篇:多线程

给主人留下些什么吧!~~