ruby错误处理和异常

一、常见异常

异常名 常见原因 怎样抛出
RuntimeError raise抛出的默认异常 raise
NoMethodError 对象找不到对应的方法 a=Oject.new
a.jackmethod
NameError 解释器碰到一个不能解析为变量或方法名的标识符 a=jack
IOError 读关闭的流,写只读的流,或类似的操作 STDIN.puts("不能写入")
Errno::error 与文件IO相关的一类错误 File.open(-10)
TypeError 方法接受到它不能处理的参数 a=3+"abc"
ArgumentError 传递参数的数目出错 def o(x) end  o(1,2,3)

二、捕获异常

用rescue捕获异常

#用rescue捕获异常

begin

result=20/0

puts result

rescue ZeroDivisionError

puts "Zero Error"

rescue

puts "Unknow error"

end

输出:Zero Error

三、raise抛出异常

def divide(x)

raise ArgumentError if x==0

end

begin

divide(0)

rescue ArgumentError

puts "ArgumentError"

end

输出:ArgumentError

四、异常保存到变量

def divide(x)

raise ArgumentError if x==0

end

begin

divide(0)

rescue =>e

puts e.to_s

end

输出:ArgumentError

五、创建异常类

class ThrowExceptionL<Exception

puts "Error L"

end

begin

raise ThrowExceptionL,"got error"

rescue ThrowExceptionL=>e

puts "Error #{e}"

end

输出:

Error L

Error got error

Ruby异常处理结构代码示例:

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

可以结合$!错误原因,和[email protected]错误位置做一个错误捕获并提示的小程序,比如:


  1. begin
  2. puts
  3. puts "file: #{name = ARGV.shift}"
  4. file = open(name)
  5. i = 0
  6. file.read.each_line
    {|line| puts "#{i+=1}.#{line}" }
  7. rescue
  8. puts "error:#{$!} at:#{[email protected]}"
  9. ensure
  10. file.close
  11. end
时间: 2024-10-18 00:00:10

ruby错误处理和异常的相关文章

ASP.NET全局错误处理和异常日志记录以及IIS配置自定义错误页面

应用场景和使用目的 很多时候,我们在访问页面的时候,由于程序异常.系统崩溃会导致出现黄页.在通常的情况下,黄页对于我们来说,帮助是极大的,因为它可以帮助我们知道问题根源,甚至是哪一行代码出现了错误.但这对于用户是非常可怕的,因为用户不知道发生了什么,也无法了解黄页给出的内容.甚至,如果我们遇到一些不友好的人,他们会拿这些内容大做文章,对我们网站产生威胁. 那我们如何在程序异常.系统崩溃时,不会出现黄页,并且还可以给出一些更加友好的提示呢?甚至在我们需要的时候,可以收集这些异常信息,并加以分析,能

第十章 错误处理与异常

(1) (2)在rescue中使用retry后,begin以下的处理会重新执行一遍.如下例子,程序每隔10秒执行一次File.open,直到能成功打开文件为止,打开文件后再读取其内容. 如上目录中没有two2.txt文件,程序每隔10秒就运行一次,直到后面我们在该目录下创建two2.txt程序才运行结束.这个如果指定了无论如何都打不开的文件就会陷入死循环.但是这个可以用于比如抢购小米手机这样的原理,目标可以访问,你不断刷新即可. (3) (4)当存在多个种类的异常,我们希望对不同的异常进行不同的

[转载]针对IIS7以上的ASP.NET网站自定义错误页面与异常日志总结

针对IIS7以上的ASP.NET网站自定义错误页面与异常日志总结 汪宇杰 2014-1-11 星期六 02:31 455 Reads 1 Comments 自定义错误页面和异常记录是个很古老的话题了,但依旧可以让人爆到现在.在我做了无数次试验并总结经验和原则后,写下本文,已警后人. 本文的范围和限制 本文仅仅适用于部署在IIS7或以上版本中的ASP.NET 4.0集成模式应用程序.IIS7以上的意思是Windows Server 2008以上服务器适用.我已在WS2012R2,IIS8上测过.

用rvm安装ruby错误

缺少对于的库文件 [[email protected] ~]# rvm install 2.0.0Searching for binary rubies, this might take some time.No binary rubies available for: redhat/6/i386/ruby-2.0.0-p451.Continuing with compilation. Please read 'rvm help mount' to get more information on

Ext JS 5 关于Store load返回json错误信息或异常的处理

关于在store load的时候服务器返回错误信息或服务器出错的处理.ExtJS4应该也能用,没测试过. 这里有两种情况: 服务器返回错误json错误信息,状态为200 服务器异常,状态为500 一.返回json错误信息的处理 在store获取json数据时,数据结构类似: { "users": [{ "id": 1, "name": "Ed", "orders": [{ "id": 1

Retrofit请求数据对错误以及网络异常的处理

异常处理 Retrofit本身会抛出HttpException,Gson解析会抛出解析异常, 此外我们还应该处理与服务器约定好的"异常",即上一篇提到的返回数据中result字段值不会0的情况 这里要先解决一个问题,就是Gson构建的对象,通过注解定义key名,以变量的类型定value的类型, 但如果同样的key在不同情况下属于不同的数据类型,就会出问题. 假如服务器返回格式是 { "result":"结果代号,0表示成功", "msg

C#基本语法复习-错误管理和异常

未处理的异常: 如果在catch中没有捕获到错误,则会返回他的调用方法,以此直到找到匹配的catch如果最后未找到则会直接提示出错. cheacked与uncheacked: cheacked会打开整数溢出检查:cheacked{...}或则cheacked(...); uncheacked为关闭整数溢出检查.

C#中MVC开发错误,类型异常

众所周知猫生猫,狗生狗,猫不可能生出狗来.同样的实体是一种强类型关系,经常会因类型写错而报错.无非是一点一点的排除找错,但是ViewModle中,你会去看吗? 有一种错误叫"AutoMapper.AutoMapperMappingException"类型的异常在AutoMapper.dll 中发生,但未在用户代码中进行处理",也可以叫"Missingtype map configuration or unsupported mapping",反正就是类型不

子网掩码错误导致通讯异常问题

昨天遇到个小问题,虽然简单但是觉得很容易被忽视,然后就会导致奇怪的现象. 两台终端PC,网关都在核心上,PC3为192.168.8.190/24,网关为192.168.8.1,PC4是192.168.13.224/24,网关为192.168.13.1.问题现场,PC3可以上网,PC4也可以上网,但是PC3无法访问PC4.核心交换机上未做任何控制. 现场检查了交换机配置,无任何异常,怀疑是电脑上是不是开启了防火墙,杀毒软件一类的,发现也没有,检查PC机的路由表也正常,越想越复杂,最后打开网卡看看,