`

Ruby => 错误处理与例外

    博客分类:
  • Ruby
 
阅读更多
1. 例外处理的写法:
begin
  有可能发生例外的处理动作
rescue 
  例外发生时的处理措施
end

Ruby将例外也视为对象。在rescue后面指定变量名称,可得例外对象。
begin
  有可能发生例外的处理动作
rescue => 用来存放例外对象的变量
  例外发生时的处理措施
end

即使没有指定变量名称,例外对象也会自动存放到表9.1中所列出的变量里,不过明确指定变量名称程序会比较好懂。
例外发生时会自动设定的变量
变量意义
$!最后发生的例外(例如对象)
$@最后例外所发生的位置相关信息


另外,对例外对象调用如下方法,可获取例外的相关信息。
方法名意义
class例外类别
message例外的消息
backtrace例外的发生位置信息($@等同于!.backtrace)


2. 善后处理
begin
  有可能发生例外的处理动作
rescue => 用来存放例外对象的变量
  例外发生时的处理措施
ensure
   无论例外发生与否都坚持要执行的动作
end


begin
  有可能发生例外的处理动作
ensure
   无论例外发生与否都坚持要执行的动作
end


3. 重新执行
在rescue语句块里可以使用retry语句重新执行begin语句块的动作。
例如:
在下面的示例中,会每隔10秒重新尝试执行open方法,成功时则返回文件内容。
file = ARGV[0]
begin
  io = open(file)
rescue
  sleep 10
  retry
end
data = io.read
io.close

但要注意文件一直打不开的话,会形成无穷循环。

4. rescue表达式
# -*- coding: utf-8 -*-
=begin
rescue可以作为表达式, 当发生意外时,则返回rescue的值。
=end

# val = "abc"                # n => 0
val = 3                      # n => 3
n = Integer(val) rescue 0
p n


5. 例外处理补充
当例外处理的begin~end范围就是整个方法本身时,可以省略begin与end,只写rescue与ensure语句块。

6. 例外类
所有例外都是Exception类的子类。
在resure语句块没有指定例外类时,会捕捉StandardError与其子类。
所以自己要定义各种例外类时,一般都会先继承StandardError类,接着再往下继承各种例外类。

7. 引发例外
自己想要让例外发生时,则使用raise方法。

8. catch与throw
def test_throw
  throw :test
end

puts "test start"
catch(:test){
  puts "before test_throw()"
  test_throw
  puts "after test_throw()"
}
puts "test end"
分享到:
评论

相关推荐

    Programming Ruby 1.9 (3rd edition)和源码

    - 例外处理:`begin`、`rescue`、`ensure`用于异常处理。 5. **Ruby标准库**: - File系统操作:提供读写文件、目录管理等功能。 - 网络编程:如Net::HTTP用于HTTP请求,Socket支持网络通信。 - JSON和XML解析...

    Ruby语言入门教程V1.0

    - **错误处理**:讨论异常处理机制,包括try/catch等关键字的使用,以及如何编写健壮的程序。 - **模块与库**:讲解如何利用Ruby的标准库或第三方库来扩展功能,提高开发效率。 通过这些章节的学习,读者将能够建立...

    线程与并发:Ruby并行世界的探索之旅

    ### 线程与并发:Ruby并行世界的探索之旅 #### Ruby 语言概览 Ruby 是一种高级的、面向对象的编程语言,由日本开发者松本行弘(Yukihiro "Matz" Matsumoto)于 1995 年创建。其设计初衷旨在实现简单、自然且强大的...

    Ruby语言入门教程

    2. **面向对象**:Ruby是一种纯面向对象的语言,所有数据都是对象,连基本类型如整数、字符串也不例外。每个对象都有类,可以发送消息(方法调用)。 3. **块、 Proc 和 Lambda**:Ruby支持代码块,这是一种内联...

    Ruby语言教程大纲.zipRuby语言教程大纲.zip

    8. **异常处理**:异常处理是任何编程语言中必不可少的部分,Ruby也不例外,会教授如何使用`begin-rescue-end`来捕获和处理错误。 9. **测试驱动开发(TDD)**:Ruby社区强调TDD,因此教程可能包含如何使用Rspec等...

    gloss:光泽是基于Ruby和水晶的高级语言,可编译为Ruby

    当前功能通过可选的类型注释进行类型检查编译时宏枚举元组和命名元组所有的ruby文件都是有效的光泽文件(目前有少量例外;大多数情况下都可以使用变通方法) 其他句法糖当前状态该项目处于将核心非晶体零件写成Gloss...

    elxgo-ruby-advance

    3. 例外处理:`begin-rescue-end`结构处理程序运行时可能出现的异常。 四、Ruby的Gem生态 Ruby的Gem库是其生态系统的核心,提供了丰富的第三方库和工具,如ActiveRecord(ORM框架)、RSpec(测试框架)、Sinatra...

    ruby_with_head_first

    7. **异常处理**:Ruby中的`begin..rescue..else..ensure`结构用于处理异常,确保程序在遇到错误时能够优雅地恢复。 8. ** Blocks, Procs, 和 Lambdas**:这三种都是Ruby中的代码块,它们之间的主要区别在于它们的...

    RB101_Programming_Foundations

    错误处理是程序健壮性的关键。Ruby提供了try-catch机制,即begin-rescue-end块,用于捕获和处理运行时错误。学习如何有效地处理异常,可以防止程序意外崩溃,提升程序的稳定性和用户体验。 最后,Ruby的测试驱动...

    搞怪语言——Starry语言简介

    6. **错误处理**:理解和调试程序时,错误处理机制至关重要。Starry语言可能有其独特的异常处理方式。 7. **标准库**:如果Starry语言有内置的库或模块,了解它们的功能和使用方法可以扩展我们对语言功能的理解。 ...

    W10D4

    在“W10D4”中,我们可能会学习到异常处理,Ruby使用`begin..rescue..end`结构来捕获和处理错误。此外,我们还将接触Ruby的Gem生态系统,这是一个庞大的开源库集合,包含了各种工具和框架,如Rails用于Web开发,...

    Semian:用于Ruby的快速恢复工具

    Semian是一个在这些情况下快速失败的库,可让您优雅地处理错误。 Semian通过受和启发的启发式模式来拦截资源访问,从而实现了这一目标: 。 一种用于将请求数量限制为有问题的依赖项的模式。 。 控制对单个资源的...

    treinamento_fundamentos

    异常处理是任何编程语言中必不可少的部分,Ruby也不例外。学习者将学会如何使用begin-rescue-end结构来捕获和处理运行时错误,以及如何自定义异常。 最后,课程可能会介绍Ruby的Gem管理和包依赖,这对于理解如何...

    r4:R4-Roda Framework v4

    1. **改进的错误处理**:Roda v4 提供了更优雅的错误处理机制,使得在开发过程中调试和修复问题更为便捷。 2. **插件系统**:Roda的核心设计是基于插件的,v4版本可能会包含新的或优化的插件,以增强框架的功能和...

    pon-jp-cheat-sheet:庞的日语速查表

    4. **错误和异常处理**:如何在日语中表示错误(エラー)和异常(例外),以及相关的处理机制。 5. **类和对象**:日语中的面向对象编程概念,如クラス、インスタンス、继承(継承)等。 6. **库和框架**:描述Ruby...

    grape-middleware-logger:记录Grape应用程序的中间件

    应用程序的记录器 日志: 请求路径参数端点类名称和处理程序回应状态请求的持续时间例外情况来自error!错误响应error!安装将此行添加到您的应用程序的Gemfile中: gem 'grape' , '>= 0.17'gem 'grape-middleware-...

    simple-crm:课堂项目

    12. **错误处理与日志记录**:良好的错误处理和日志记录机制对于调试和监控应用至关重要。 这个“simple-crm”项目为初学者提供了实践这些技术的平台,涵盖了从后端开发到前端交互,再到项目部署的全过程。通过参与...

    selenium 3.3.1开发包

    9. **错误修复**:每个新版本都会包含对已知问题的修复,Selenium 3.3.1 也不例外。这些修复确保了更少的测试中断和更可靠的自动化测试流程。 10. **社区支持**:Selenium 拥有庞大的开发者社区,不断贡献代码、...

    liquid-php:Liquid - 轻量级 PHP 框架

    5. **错误处理和日志记录**:框架内置了错误处理机制,可以捕获和记录运行时的异常,帮助开发者定位和解决问题。日志记录功能则能保存程序运行状态和错误信息,便于后期分析和调试。 6. **中间件**:类似于其他Web...

Global site tag (gtag.js) - Google Analytics