2
0

例外処理について調べてみた!

Posted at

例外処理について、ChatGPTと一緒に勉強してみました!

ChatGPT

例外処理は、プログラムが実行中に予期せぬ状況が発生した際に、それに対処するための仕組みです。これはプログラムの正常な流れを中断し、エラーや異常状態に対する適切な対応を可能にします。

例外処理の基本: プログラムの異常状態への対応方法 🚀

プログラムを書く際には、エラーや異常な状態が発生することがあります。そんなときに役立つのが「例外処理」です。

1. 例外処理って何?

例外処理は、プログラムが実行中にエラーや異常な状態が発生した際に、それに適切に対応する仕組みです。
例外処理を使用することで、プログラムが終了せずにエラーをハンドリングすることが可能になります。

2. 例外ってどんなもの?

プログラムでの例外は、エラーや異常な状態を表す。
例外を投げることで、プログラムがその状況にどう対処するかを示すことができる。
Rubyでは raise を使って例外を投げることができる。そして、rescue ブロックを使ってその例外をキャッチし、適切な処理を行っていく。

3. 例外処理の基本構文

Rubyでは begin, rescue, end を使って例外処理を行う。
例外が発生する可能性があるコードを begin から end までで囲み、例外をキャッチして適切な処理を行っていく。

4. Rubyにおける例外の種類

例外クラスとそれぞれの役割について調べてみた!

4.1. StandardError

ChatGPT

Rubyのプログラムでよく起こるさまざまなエラーの「親クラス」みたいなものです。親クラスとは、同じ種類のものをまとめて管理する大元のようなものです。
例えば、学校のクラスがあって、それぞれのクラスには色んな生徒がいますよね。この時、学校全体のクラスを「親クラス」と考えると分かりやすいです。同じように、「StandardError」はたくさんのエラーの親クラスです。
具体的に言うと、プログラムを実行している途中で起こる「一般的なエラー」が、このStandardErrorのもとで管理されています。例えば、計算中に数学的な問題が起きたり、変なデータを扱おうとしたりすると、これに該当します。
これがあるおかげで、プログラムが壊れたときに、どんなエラーが起きたのかを知りやすくなります。そして、そのエラーに合わせて対処することができるんです。
簡単に言うと、「StandardError」はプログラムが驚いたり、戸惑ったりするときの、エラーの基本的なまとめ役なんです!

4.2. RuntimeError

ChatGPT

StandardErrorは、プログラムが実行されている最中に起こる問題やエラーの「おおもと」みたいなものです。もしプログラムが予期しない挙動を示したり、うまく動かなかったりすると、このクラスに関連するエラーが起こる可能性があります。
たとえば、プログラムで配列の特定の位置にアクセスしようとしたときに、その位置が存在しない場合や、変数がちゃんと定義されていない場合、このエラーが発生することがあります。
簡単に言うと、「StandardError」はプログラムが驚いたり、困ったりするときの、エラーの基本的な管理者みたいなものです。

4.3. ArgumentError

ChatGPT

**ArgumentError(引数エラー)**は、プログラムがメソッド(関数)を呼び出す際、そのメソッドが求める「情報」を正しく提供していない場合に起きるトラブルです。
イメージすると、プログラムが「お願い事」をするときに、必要な情報がちゃんと伝えられないと怒られる感じです。たとえば、「あの本のページ数を教えて」と言われたときに、「どの本?」と指定されなかったら、「どの本のページ数?」と怒られるのと似ています。

4.4. NameError

ChatGPT

**NameError(名前エラー)**は、プログラムが「あれ?その名前のもの、知らないよ」と言っているエラーです。
イメージすると、プログラムが「友達の名前を呼んで!」と言われても、その友達がいない場合、プログラムは「その友達、知らないなぁ」と言ってしまいます。

4.5. ZeroDivisionError

ChatGPT

**ZeroDivisionError(ゼロ除算エラー)**は、数学でいうところの「ゼロで割る」ことをプログラムでしようとしたときに出るエラーです。プログラムはゼロを割ることができないので、「ゼロで割ろうとしていますよ!」と注意されるイメージです。

4.6. NoMethodError

ChatGPT

**NoMethodError(メソッド未定義エラー)**は、ある「道具(メソッド)」が見つからないときに出るエラーです。例えば、スプーンでご飯を食べようとしたら、スプーンが見当たらないときに「スプーンがありませんよ!」と怒られる感じです。

4.7. TypeError

ChatGPT

**TypeError(型エラー)**は、プログラムが「これって何の道具?」と混乱するときに出るエラーです。たとえば、釘をハンマーで打とうとしたら、釘を打つ道具が違うので「これは違うよ!」と指摘される感じです。

4.8. FileNotFoundError

ChatGPT

**FileNotFoundError(ファイル未発見エラー)**は、プログラムが「そのファイル、見当たらないよ!」と怒るエラーです。例えば、指定した場所に本がなかったら「その本、見当たらないんだけど」と言われる感じです。

5. 実際の例

実際にコードを書いて、例外処理の流れを追ってみた。

メソッド1: 例外をキャッチする

def method_with_exception_handling
  puts 'メソッド1: 開始'
  
  begin
    # メソッド2を呼び出す
    method2
  rescue => e
    puts '例外が発生しました'
  end
  
  puts 'メソッド1: 終了'
end

# メソッド2: ゼロ除算エラーを引き起こす
def method2
  puts 'メソッド2: 開始'
  
  # ゼロ除算エラーを引き起こす
  result = 10 / 0
  
  puts 'メソッド2: 終了'
end

# 処理を開始する
method_with_exception_handling
メソッド1: 開始
メソッド2: 開始
メソッド3: 開始
例外が発生しました
メソッド1: 終了

例外処理の除外: エラーハンドリングをしない

意図的に例外処理を行わずにエラーをそのまま発生させるケースがあるみたい。
例外処理を消して実行してみた。

def method_without_exception_handling
  puts 'メソッド3: 開始'
  
  # ゼロ除算エラーを引き起こす
  result = 10 / 0
  
  puts 'メソッド3: 終了'
end

# 処理を開始する
method_without_exception_handling
メソッド1: 開始
メソッド2: 開始
メソッド3: 開始
divided by 0 (ZeroDivisionError)

まとめ

実際にコードを書いて実行することで、例外処理の処理される流れを理解できました!

2
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
2
0