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"
分享到:
相关推荐
Ardrone <==> Adaptor/Drivers Arduino <==> Adaptor Beaglebone Black <==> Adaptor Crazyflie <==> Adaptor/Driver Leap Motion <==> Adaptor/Driver Pebble <==> Adaptor/Driver Raspberry Pi <==> ...
Redis安装遇到错误解决方案Error installing redis: redis requires Ruby version >= 2.3.0. 先安装rvm,再把ruby版本提升至2.3.0
Arduino <==> LibraryBeaglebone Black <==> LibraryDigispark <==> LibraryLeap Motion <==> LibrarySpark <==> LibrarySphero <==> LibraryGPIO <==> DriversButtonLEDServo不久之后将会支持更多平台... ...
ruby数组处理大全 如函数名称 说明 示例 &数组与,返回两数组的交集 [1,2] & [2,3] =>[2] *复制数组n次 [1,2]*2 => [1,2,1,2] +返回两数组的并集,但不排除重复元素 [1,2]+[2,3] =>[1,2,2,3] 追加元素,但不...
通过箭头注释( // => )显示方法的变量或返回值。 行为类似于ruby xmpfilter命令。 安装 $ npm install arrow-logger 用法 将箭头注释添加到您的代码中并运行。 $ cat sample . js var string = 'Hello World' ; ...
支持哪些浏览器?... ie.button(:name=>"",:id=>"",:index=>n,:type=>"").doclick 输入框 ? ie.text_field(:name=>"").set "变量" ? ie.text_field(:name=>"").value 取text_field值不是用text而是value!
narray, 这里存储库包含旧版本的NArray 请访问新版 => 这里软件包的旧版本,仅维护。新版本正在开发> ruby/numo:: narray 。 ruby/narray0.6.1.0 ( 2014-06-02 )主页GitHub知识库RubyGemsNArray方法列表
Measurement.parse('25 fl oz') # => 25.0 fl. oz. Measurement.parse('12 tonnes') # => 12.0 t Measurement.parse('25 "') # => 25.0 in. 度量包括数量和单位。 更多详情、使用方法,请下载后阅读README.md文件
irb >> require 'starling' => true >> starling = Starling.new('127.0.0.1:22122') => MemCache: 1 servers, ns: nil, ro: false >> starling.set('my_queue', 12345) => nil >> starling.get('my_queue') => ...
codec => sflow {} } } output { stdout { codec => rubydebug } } 依赖关系 em-sflow Ruby库 >= 1.0.3 地方发展 在本地克隆 repo(一些 $REPOPATH) 安装 logstash(例如用于 osx) brew install logstash ...
Sublime Text 2插件可切换Ruby String文字(例如“ foo” =>'foo'=>%Q {foo})。 安装 $ cd ~/Library/Application\ Support/Sublime\ Text\ 2/Packages $ git clone ...
示例用法: > Calendar.for_week(4).of_month(8).in_year(2012).show{:wed=>22, :thu=>23, :fri=>24, :sat=>25, :sun=>26, :mon=>27, :tue=>28}> Calendar.for_month(6).in_year(2011).show{:mon=>[6, 13, 20, 27], ...
py.to_pinyin_abbr("刘德华") #=> ldh py.to_permlink('中文轉漢語拼音') #=> "zhong-wen-zhuan-han-yu-pin-yin" py.to_pinyin('中文轉漢語拼音',separator = '-', tone = true) #=> "zhong1-wen2-zhuan3-han4-...
options = { :namespace => "app_v1", :compress => true } dc = Dalli::Client.new('localhost:11211', options) dc.set('oschina', 123) value = dc.get('oschina') 标签:Dalli
% sudo ruby lsof.rb -i :80 -s TCP:LISTEN{1846=>{:type=>"IPv4", :send_queue=>"0", :protocol=>"TCP", :state=>"LISTEN", :name=>"*:www", :fd=>7, :read_queue=>"0"}}{1847=>{:type=>"IPv4", :send_queue=>"0",...
WASM.rb Ruby语言的WASM Runner... to_hash 输出: { :magic => [ 0 , 97 , 115 , 109 ] , :version => [ 1 , 0 , 0 , 0 ] , :sections => [ { :section => "type" , :id => 1 , :size => 7 , :types => [ { :params =>
states ( :us )# => {:AK=>"Alaska", :AL=>"Alabama", :AR=>"Arkansas", :AZ=>"Arizona", :CA=>"California", :CO=>"Colorado", :CT=>"Connecticut", :DC=>"District of Columbia", :DE=>"Delaware", :FL=>"Florida...
要求按照姓名的首字母查找教师。同时拼音的首字母是要来自数据库中现已近存在的姓名的姓氏首字母。简单的说就是有这样一些人再数据库中。如有:张三,王五,李四,赵六,李平,刘倩等。...#=> "liudh
#Ruby 文件树 ... { :children => nil , :type => "file" , :full_path => "test/data/dir1/file3.txt" } } , :type => "directory" , :full_path => "test/data/dir1" } , " dir2 "=> {:children=>
conjugate :tense => :future , :person => :first , :plurality => :singular , :aspect => :progressive , :subject => true # => :"I will be sleeping" 安装 gem install verbs 选件 该库对英语动词词缀进行了...