エラーメッセージの読み取り方
エラーメッセージが出ると、悲しい気持ちになりますよね。。
しかし、エラーメッセージは私たちに
思いやりのあるさまざまなヒントを与えてくれています。
エラーが起きてもパソコンは壊れないので安心してください。
一つ一つメッセージをしっかりみてエラーに対処していきましょうー!
【エラー例1:打ち間違えた】
今回はputs をputと間違えた場合のエラーを紹介します。
●h1.rb
このように入力し、プログラムを実行すると、
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メソッドは定義されていません」となります。
「もしかしてこれのことを言っているのかな?」と
候補を出してくれます。
Did you mean?は日本語に訳すと「もしかして?」という意味です。
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
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
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
Traceback (
most recent call last):
ruby: No such file or directory -- mikan.rb (LoadError)
エラー内容は、No such file or directory の部分ですね。
「このようなファイルやフォルダはない」ということを意味しています。
エラーの名前は、LoadErrorで読み込みエラーです。
このようにエラーメッセージには、実行しているファイル名・行番号・エラーの種類と内容・修正候補の情報が丁寧にのっています。
正しく読み取り、エラーを解決していきましょうー!
一緒にプログラミングの勉強頑張っていきましょうね!!
それではまた明日ー!
今日も良い一日をー!