2013年4月13日Ruby初級者向けレッスン 45回— 例外 —ひがき @ Ruby関西
お品書き• エラーメッセージの読み方• 例外を捕捉する• 例外を起こす
エラーメッセージrequire ’open-uri’open ’http://github.com/rubykansai/workshops/wiki’.../open-uri.rb:223:in ‘open_loop’: redirectio...
エラーメッセージと例外アプリケーション ライブラリ A ライブラリ B-- 例外対処-- 例外異常終了
例外いろいろ TypeError1 + 1# ~ ex.rb:1:in ‘+’: can’t convertFixnum into String (TypeError)# ~ from ex.rb:1:in ‘main’
例外いろいろ NoMethodError1.to_sym# ~ ex.rb:1:in ‘main’: undefinedmethod ‘to_sym’ for 1:Fixnum(NoMethodError)
例外いろいろ NameErrorn.times{puts ’Ruby!’}# ~ ex.rb:1:in ‘main’: undefinedlocal variable or method ‘n’for main:Object (NameError)
例外いろいろ NoMethodError (2)n = ARGV.first.to_i unless ARGV.empty?n.times{puts ’Ruby!’}# ~ ex.rb:2:in ‘main’: undefinedmethod ...
例外いろいろ Errno::ENOENTopen(’nothing.txt’)# ~ ex.rb:1:in ‘initialize’:No such file or directory -nothing.txt (Errno::ENOENT)#...
例外いろいろ SyntaxErrordef even?(n)if n % 2 == 0trueelsefalseend# ~ ex.rb:6: syntax error, unexpectedend-of-input, expecting ke...
Intelligence と Wisdom雨が降ってきて…• Intelligence– 雨だ!• Wisdom– 傘を差そう– 雨宿りしよう
例外を捕捉する コード例files = %w[file.txt file1.txt file2.txt]files.each do |fn|beginopen(fn, ’w’){|f| f.puts ’Ruby!!’}breakrescue =...
例外を捕捉するbegin式1…[rescue [型1[, 型2]…][= 変数][then]式2…]…[else式3…][ensure式4…]end
例外を捕捉する コード例2def fact(n)n.factorialrescue ArgumentError1以上の整数を指定してくださいrescue NoMethodError整数を指定してくださいend
例外の種類puts NoMethodError.ancestors#  NoMethodError#  NameError#  StandardError#  Exception#  Object#  Kernel#  BasicObject
rescue 修飾子3.factorial rescue 0 # = 64.factorial rescue 0 # = 245.factorial rescue 0 # = 1200.factorial rescue 0 # = 02.5.f...
例外を起こすraise simple# ~ ex.rb:1:in ‘main’:simple (RuntimeError)
例外を起こす クラス指定raise ArgumentError, bad argument# ~ ex.rb:1:in ‘main’:bad argument (ArgumentError)
例外を起こす オブジェクトraise TypeError.new(can’t convert...)# ~ ex.rb:1:in ‘main’:can’t convert... (TypeError)
例外を起こす 独自の例外クラスclass MyError  StandardError; endraise MyError, ’original’# ~ ex.rb:3:in ‘main’:original (MyError)
演習問題 0今日のレッスンで分からなかったこと、疑問に思ったことをグループで話し合ってみよう。
演習問題 1• いろいろな例外を発生させてみようdef exyieldrescue#{$!} (#{$!.class})endex{1.to_sym} # = undefined method ‘to_sym’ foex{1 + 1} # = ...
演習問題 2• いろいろな例外を発生させてみよう– KeyError を捕捉しよう– KeyError と StopIteration を捕捉しよう
演習問題 3• デバッグしてみよう– どんな例外が発生するか– 本当は何をしたかったのか– 修正してみよう[0..9].map{|i| i * 2}
演習問題 4• デバッグしてみようrequire ’./person’matz = Person.new(’matz’, ’1965-04-14’)matz.age# ~ .../learn_ruby_kansai_57/person.rb:1...
自己紹介• 名前 (ニックネーム)• 普段の仕事・研究内容・代表作• Ruby歴・コンピュータ歴• 勉強会に来た目的• などなど
参考• るりまhttp://doc.ruby-lang.org/ja/• サンプルコードhttps://github.com/higaki/learn ruby kansai 57
Upcoming SlideShare
Loading in...5
×

Ruby初級者向けレッスン 45回 ─── 例外

594

Published on

Published in: Technology, Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
594
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Ruby初級者向けレッスン 45回 ─── 例外

  1. 1. 2013年4月13日Ruby初級者向けレッスン 45回— 例外 —ひがき @ Ruby関西
  2. 2. お品書き• エラーメッセージの読み方• 例外を捕捉する• 例外を起こす
  3. 3. エラーメッセージrequire ’open-uri’open ’http://github.com/rubykansai/workshops/wiki’.../open-uri.rb:223:in ‘open_loop’: redirectionforbidden: http://github.com/rubykansai/workshops/wiki -> https://github.com/rubykansai/workshops/wiki (RuntimeError)from .../open-uri.rb:149:in ‘open_uri’from .../open-uri.rb:688:in ‘open’from .../open-uri.rb:34:in ‘open’from ex.rb:2:in ‘<main>’
  4. 4. エラーメッセージと例外アプリケーション ライブラリ A ライブラリ B-- 例外対処-- 例外異常終了
  5. 5. 例外いろいろ TypeError1 + 1# ~ ex.rb:1:in ‘+’: can’t convertFixnum into String (TypeError)# ~ from ex.rb:1:in ‘main’
  6. 6. 例外いろいろ NoMethodError1.to_sym# ~ ex.rb:1:in ‘main’: undefinedmethod ‘to_sym’ for 1:Fixnum(NoMethodError)
  7. 7. 例外いろいろ NameErrorn.times{puts ’Ruby!’}# ~ ex.rb:1:in ‘main’: undefinedlocal variable or method ‘n’for main:Object (NameError)
  8. 8. 例外いろいろ NoMethodError (2)n = ARGV.first.to_i unless ARGV.empty?n.times{puts ’Ruby!’}# ~ ex.rb:2:in ‘main’: undefinedmethod ‘times’ for nil:NilClass(NoMethodError)
  9. 9. 例外いろいろ Errno::ENOENTopen(’nothing.txt’)# ~ ex.rb:1:in ‘initialize’:No such file or directory -nothing.txt (Errno::ENOENT)# ~ from ex.rb:1:in ‘open’# ~ from ex.rb:1:in ‘main’
  10. 10. 例外いろいろ SyntaxErrordef even?(n)if n % 2 == 0trueelsefalseend# ~ ex.rb:6: syntax error, unexpectedend-of-input, expecting keyword_end
  11. 11. Intelligence と Wisdom雨が降ってきて…• Intelligence– 雨だ!• Wisdom– 傘を差そう– 雨宿りしよう
  12. 12. 例外を捕捉する コード例files = %w[file.txt file1.txt file2.txt]files.each do |fn|beginopen(fn, ’w’){|f| f.puts ’Ruby!!’}breakrescue = ex$stderr.puts #{ex} (#{ex.class})endend
  13. 13. 例外を捕捉するbegin式1…[rescue [型1[, 型2]…][= 変数][then]式2…]…[else式3…][ensure式4…]end
  14. 14. 例外を捕捉する コード例2def fact(n)n.factorialrescue ArgumentError1以上の整数を指定してくださいrescue NoMethodError整数を指定してくださいend
  15. 15. 例外の種類puts NoMethodError.ancestors# NoMethodError# NameError# StandardError# Exception# Object# Kernel# BasicObject
  16. 16. rescue 修飾子3.factorial rescue 0 # = 64.factorial rescue 0 # = 245.factorial rescue 0 # = 1200.factorial rescue 0 # = 02.5.factorial rescue 0 # = 02.factorial rescue 0 # = 0
  17. 17. 例外を起こすraise simple# ~ ex.rb:1:in ‘main’:simple (RuntimeError)
  18. 18. 例外を起こす クラス指定raise ArgumentError, bad argument# ~ ex.rb:1:in ‘main’:bad argument (ArgumentError)
  19. 19. 例外を起こす オブジェクトraise TypeError.new(can’t convert...)# ~ ex.rb:1:in ‘main’:can’t convert... (TypeError)
  20. 20. 例外を起こす 独自の例外クラスclass MyError StandardError; endraise MyError, ’original’# ~ ex.rb:3:in ‘main’:original (MyError)
  21. 21. 演習問題 0今日のレッスンで分からなかったこと、疑問に思ったことをグループで話し合ってみよう。
  22. 22. 演習問題 1• いろいろな例外を発生させてみようdef exyieldrescue#{$!} (#{$!.class})endex{1.to_sym} # = undefined method ‘to_sym’ foex{1 + 1} # = String can’t be coerced into
  23. 23. 演習問題 2• いろいろな例外を発生させてみよう– KeyError を捕捉しよう– KeyError と StopIteration を捕捉しよう
  24. 24. 演習問題 3• デバッグしてみよう– どんな例外が発生するか– 本当は何をしたかったのか– 修正してみよう[0..9].map{|i| i * 2}
  25. 25. 演習問題 4• デバッグしてみようrequire ’./person’matz = Person.new(’matz’, ’1965-04-14’)matz.age# ~ .../learn_ruby_kansai_57/person.rb:14:in ‘age’: undefined method ‘strftime’for 1965-04-14:String (NoMethodError)# ~ from ex.rb:3:in ‘main’
  26. 26. 自己紹介• 名前 (ニックネーム)• 普段の仕事・研究内容・代表作• Ruby歴・コンピュータ歴• 勉強会に来た目的• などなど
  27. 27. 参考• るりまhttp://doc.ruby-lang.org/ja/• サンプルコードhttps://github.com/higaki/learn ruby kansai 57
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×