1
0

More than 1 year has passed since last update.

Ruby の rescue の注意点

Last updated at Posted at 2022-02-23

今更ながら Ruby技術者認定試験のGOLD を受けようと思い
模擬試験問題を解いていたところ...奇妙なコードに出くわした。
忘れると痛い目を見そうなので、ここに記述する

begin
  'aaa'.bbbb
rescue
  puts "レスキュー出来たね"
end

#=> レスキュー出来たね

何も問題はない

begin
  'aaa'.bbbb
rescue NoMethodError
  puts "レスキュー出来たね"
end

#=> レスキュー出来たね

これも問題ない
期待通りの動きである

begin
  'aaa'.bbbb
rescue NameError
  puts "レスキュー出来たね"
end

#=> レスキュー出来たね
  • むむ?
    • エラーの種類が違うのでは?
begin
  'aaa'.bbbb
rescue StandardError
  puts "ここには来ないよね?"
rescue NoMethodError
  puts "レスキュー出来たね"
end

#=> ここには来ないよね?

来てしまったのである
原因を追うと...

NoMethodError の親クラス = NameError
NameError の親クラス = StandardError

という事みたい。
トラップだな。気をつけないとね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0