begin #开始
 
 raise.. #抛出异常
 
rescue [ExceptionType = StandardException] #捕获指定类型的异常 缺省值是StandardException
 $! #表示异常信息
 $@ #表示异常出现的代码位置
else #其余异常
 ..
ensure #不管有没有异常,进入该代码块
 
end #结束

这是异常处理结构,可以结合$!错误原因,和$@错误位置做一个错误捕获并提示的小程序了,比如

begin
    puts 
    puts "file: #{name = ARGV.shift}"
    file = open(name)
    i = 0
    file.read.each_line{|line| puts "#{i+=1}.#{line}" }
    puts
rescue
    puts "error:#{$!} at:#{$@}"
ensure
    file.close
end

上面的小程序读入一个指定的文件并加入行号进行输出,当产生错误时会输出错误信息以及提示,你可以故意输入一个不存在的文件名。

其实begin相当于c#的try
rescue相当于c#的catch
ensure相当于c#的finaly
raise相当于c#的throw

异常类的结构

异常类 Object

  • Exception

    • (Interrupt) (ruby 1.7 特性 version 1.6以前的位置)
    • NoMemoryError
    • ScriptError
      • LoadError
      • (NameError) (ruby 1.7 特性 version 1.6以前的位置)
      • NotImplementedError
      • SyntaxError
    • SignalException
      • Interrupt (ruby 1.7 特性)
    • StandardError
      • ArgumentError
      • IndexError
        • KeyError (ruby 1.9 特性)
      • IOError
        • EOFError
      • LocalJumpError
      • NameError (ruby 1.7 特性)
        • NoMethodError (ruby 1.7 特性)
      • RangeError
        • FloatDomainError
      • RegexpError
      • RuntimeError
      • SecurityError
      • SystemCallError
        • Errno::EXXX
      • SystemStackError
      • ThreadError
      • TypeError
      • ZeroDivisionError
    • SystemExit
    • fatal

转载于:https://www.cnblogs.com/coderlee/archive/2008/01/17/1042831.html

Ruby之旅(16) 异常处理 rescue与ensure相关推荐

  1. Java探索之旅(16)——异常处理

    1.异常与异常处理 在<java编程思想>中这样定义 异常:阻止当前方法或作用域继续执行的问题.虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来 ...

  2. Ruby之旅之字符串

    Ruby之旅之字符串 String 1.创建字符串的五种方式: ①一对单引号包围字符 如: 'hello' ②一对双引号包围字符 如: "hello" ③%q后面用一对分界符包围的 ...

  3. WCF后续之旅(16): 消息是如何分发到Endpoint的--消息筛选(Message Filter)

    在介绍终结点的ListenUriMode时,我们提到了两个特殊的对象ChannelDispatcher和ChannelListener.这两个对象在整个WCF的消息分发系统中具有重要的地位,在这节里, ...

  4. 小猪的Python学习之旅 —— 16.采集拉勾网数据分析Android就业行情

    小猪的Python学习之旅 -- 16.再尝Python数据分析:采集拉勾网数据分析Android就业行情 标签:Python 一句话概括本文: 爬取拉钩Android职位相关数据,利用numpy,p ...

  5. Ruby之旅—Ruby的Hello World

    1.新建一个记事本,将后缀改为.rb(Ruby程序的源文件自由度非常高,它甚至可以不以.rb作为后缀,但通常建议还是以.rb作为后缀,提高程序的可读性),在记事本中敲入如下代码,保存关闭. puts ...

  6. 乐鑫Esp32学习之旅16 学习本地语音唤醒离线识别框架 esp-skainet ,如何修改唤醒词? 如何自定义命令词?如何做意图动作?

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  7. win8 开发之旅(16)---------足球游戏揭秘(2)

    游戏的原貌到底是怎么样的了,这节我们给你来揭秘吧. 我们这里遵从先外向里的原则,先局部后整体的原则吧.首先看看他的整体的结构吧!如图所示: 这里没有用分层的概念,而是一个文件夹代表了一个层.层确实蛮多 ...

  8. 16.异常处理机制:exception

    python常见异常总结:http://bbs.fishc.com/forum.php?mod=viewthread&tid=45814&extra=page%3D1%26filter ...

  9. Ruby 基础教程1-6

    1.循环实现方法 循环语句 (while;for; loop,until) 循环方法(times,each) 2.for  for 变量 in 对象 主体 end 3.while while 条件 e ...

最新文章

  1. sysctl -p 重新加载文件/etc/sysctl.conf -a 所有参数 -w 临时指定
  2. 使用account lock或者account unlock语句
  3. 目前最常用的计算机机箱类型为_绍兴承接离心风机箱高品质
  4. linux on win原理,linux on win10 上手体验
  5. 多层陶瓷电容器用处_陶瓷电容器的用途有哪几种?
  6. 减少SQL Server ASYNC_NETWORK_IO等待类型
  7. 有关send()和recv()函数的理解
  8. linux命令行使用
  9. spring事务源码执行过程分析
  10. c51单片机时钟程序汇编语言,51单片机数字钟汇编程序精选.docx
  11. KBQA-Bert学习记录-构建BERT-CRF模型
  12. 大气压力换算公式_常用压力单位换算表
  13. 微信小程序选择开始时间和结束时间控件
  14. Axure8.0基础教程
  15. python获取当前星期几
  16. Monitor Linux —使用zabbix服务器的跨平台固件
  17. Mac 系统升级ssh报错
  18. 英语词频统计器分词器基于Java
  19. Ubuntu 截图工具 Flameshot
  20. Marvell交换芯片88E6390驱动开发

热门文章

  1. mongodb排序_MongoDB排序
  2. python 字符串函数_Python字符串函数
  3. [修复] Eclipse – Java编译器级别与已安装的Java项目构面的版本不匹配
  4. 工作流 节点子线程_节点JS体系结构–单线程事件循环
  5. Docker入门命令:开发人员版
  6. zTree入门实例(一眼就看会)
  7. C语言嵌入式系统编程修炼之(四)屏幕操作
  8. 常用sql001_partition by 以及 row_number()和 dense_rank()和rank()区别
  9. mysql homedir迁移
  10. linux内核编译(升级)