Output Diary

プログラミング × 読書 のアウトプットを発信しています

【Ruby】エラーメッセージが出たら一旦頭の中で意味を考えよう!

エラーメッセージの読み取り方

 

f:id:kina_kq:20210219145659p:plain



エラーメッセージが出ると、悲しい気持ちになりますよね。。

しかし、エラーメッセージは私たちに

思いやりのあるさまざまなヒントを与えてくれています。

 

エラーが起きてもパソコンは壊れないので安心してください。

一つ一つメッセージをしっかりみてエラーに対処していきましょうー!

 

 

【エラー例1:打ち間違えた】

今回はputs をputと間違えた場合のエラーを紹介します。
 
h1.rb
1: put "h1"
 
 
このように入力し、プログラムを実行すると、
 
Traceback (most recent call last):
h1.rb:1:in `<main>': undefined method `put' for main:Object (NoMethodError)
Did you mean? puts
putc
 
 
と表示されます。
 
 
これらのエラーメッセージの内容について詳しく確認していきます。
 f:id:kina_kq:20210220044713j:plain



①のh1.rbは実行したファイル名です。
②の数字がプログラムの何行目でエラーが起きたのかを教えてくれます。
③今回は省略します。
④エラーメッセージの本文です。
⑤エラーの名前です。
 
 
今回の場合は、「1行目に書かれたputメソッドは定義されていません」となります。
 
 
そして、Rubyは優しいので
「もしかしてこれのことを言っているのかな?」
候補を出してくれます。
 
 
 
Did you mean? puts
         putc
 
 
Did you mean?は日本語に訳すと「もしかして?」という意味です。
 
今回Rubyは、
puts
putc
を提案しています。
 
 
それでは、エラーメッセージ全体に戻りましょう。
 
Traceback (most recent call last):
h1.rb:1:in `<main>': undefined method `put' for main:Object (NoMethodError)
Did you mean? puts
putc
 
これですね。
 
今回のエラーメッセージは、
「h1.rbの1行目に書かれたputメソッドは定義されていません。
もしかして、putsやputcではないですか?」
 
ということを表していました。
 
このメッセージをみて、「あっ!putsをputと書き間違えてた!」と気づくことが出来ますね。
こうしてputsを書き直すことで、プログラムは意図通り動くようになりました。
 
 
エラーメッセージを読み解くことは、デバック(エラーを修正する)をする上で基礎となる重要な技術です。

 一つずつ落ち着いてみていったら、怖くはないですね!

 

 

他にもエラーメッセージの例をいくつか紹介します。

 

【エラー例2:変数の名前を間違えた】

変数 xに1を代入して、それを表示させたいと思った時にうっかり変数 yを表示ささせるプログラムを書いたケースです。

 

xy.rb

1: x = 1
2: p y
 
 
Traceback (most recent call last):
xy.rb:2:in `<main>': undefined local variable or method `y' for main:Object (NameError)

 

 xy.rbのファイルでエラーが発生しました。

エラー内容は、undefined local variable or method `y'の部分ですね。

「定義されていない変数またはメソッド 'y'」という意味です。

エラーの名前は(NameError)の部分で、名前エラーですね。

 

 

【エラー例3:0で割っちゃった】

0で割り算をしてしまったときのエラーです。

0で割り算をするとエラーが発生します。

 

0div.rb

1: p 1 / 0
 
Traceback (most recent call last):
1: from 0div.rb:1:in `<main>'
0div.rb:1:in `/': divided by 0 (ZeroDivisionError)

 

 0div.rbファイルの1行目でエラーが発生しました。

エラー内容は、divided by 0の部分ですね。

「0での割り算」という意味です。

エラーの名前はZeroDivisionError(0除算エラー)です。

 

 

【エラー例4:ファイル名を間違えた】

banana.rbを実行しようとして、mikan.rbという存在しないファイルを指定した時のエラーです。

 

banana.rb

1: puts "banana"
 
Traceback (most recent call last):
ruby: No such file or directory -- mikan.rb (LoadError)

 

エラー内容は、No such file or directory の部分ですね。

「このようなファイルやフォルダはない」ということを意味しています。

エラーの名前は、LoadErrorで読み込みエラーです。

 

 

このようにエラーメッセージには、実行しているファイル名・行番号・エラーの種類と内容・修正候補の情報が丁寧にのっています。

 

 

正しく読み取り、エラーを解決していきましょうー!

一緒にプログラミングの勉強頑張っていきましょうね!!

 

コーギーのイラスト

 

 

 それではまた明日ー!

 今日も良い一日をー!