はじめに
プログラミングをやっていると必ずエラーに遭遇します。
このエラーが解決できずに勉強が進まないどころか、プログラミング自体が嫌いなってしまっては非常にもったいありません。
今回は、そんな忌み嫌われているエラーをどのように考えて解決していけばいいかを解説していきます。
具体的にこの記事では、
- エラーはなぜ起きるのか?
- どこに注目して、どのようにすれば解決できるのか?
- エラー解決に役立つツール
について説明していきます。
エラーが生じたとき、どのようにすればよいかの手立てになれば幸いです。
エラーとの上手な付き合い方を学んで、今後のプログラミング学習で挫折しないようモチベーションを管理しましょう。
目次
エラーはなぜ起きるのか?
そもそもエラーはなぜ起きるのでしょうか?
近年コンピューターの技術進歩は、目まぐるしく人工知能(AI)が人間の仕事を奪ってしまうなど言われています。
それだけコンピューターは頭がいい!と思っている人も多いかもしれませんが、実はそうではありません。
コンピューターは指示したことを素早く計算して判断することは得意ですが、こちらがしっかり指示ができないと上手く機能しません。
つまり言われたことしかできません。
この指示を誤っているために発生してしまうのがエラーの原因の1つです。
実際にどこがどのように間違っているかはエラーの内容を見ると分かります。
つまり、エラーの内容を読み解いていくことがエラーを解決していくカギになります。
エラーを解決する考え方
それでは実際にどのようにエラーを解決していけばよいか具体例を挙げて説明していきます。
ここで大切なことは2点です。
- エラーの内容を知る
- エラーの場所を知る
この2つが特定できればほとんどのエラーは解決することができます。
以下の具体例を使って一緒に考えてみましょう。
今回のサンプル
それでは簡単なPythonでのコードを例にとって考えていきたいと思います。
なお、これはPythonの説明ではないので、コードの書き方が分からなくても問題ありません。
以下は、関数に入れた数(今回は12)に2を足す関数を実行するコードです。
12 + 2で14と出力されることを目標にしています。
# errortest.py
class Calculation(object):
def __init__(self, num=None):
self.num = num
def add_num(self, num):
return num + "2"
calculation = Calculation()
r = calculation.add_num(12)
print(r)
このコードをコマンドで実行すると、次のようなエラーが出てしまいました。
C:\...\syntax_practice> py errortest.py
Traceback (most recent call last):
File "errortest.py", line 10, in <module>
r = calculation.add_num(12)
File "errortest.py", line 6, in add_num
return num + "2"
TypeError: unsupported operand type(s) for +: 'int' and 'str'
このように英文がいっぱい出てくると面食らってしまうかもしれません。
しかし、見るべきところは限られています。注目すべきは一番最後とその直前の部分です。
エラーの種類を知る
一番最後とその直前には以下のように書かれています。
File "errortest.py", line 6, in add_num
return num + "2"
TypeError: unsupported operand type(s) for +: 'int' and 'str'
TypeErrorとはエラーの名前です。
基本的にはエラーには名前が付いているので、そのエラー名をGoogleで検索してみると、なぜエラーが起きたのかを大まかに知ることができます。
今回はType(型)が違うという意味のエラーです。
これで数値や文字列などの型が違っているエラーだということが分かりました。
エラーを具体的に調べる
ざっくりとどのようなエラーなのかが分かりました。
次は具体的にどのようなエラーなのかを調べていきます。TypeErrorの後には具体的なエラーの内容が記載されています。
unsupported operand type(s) for +: 'int' and 'str'
この英文が良く読めない場合は、Google翻訳で調べてみると良いです。
今のGoogle翻訳はかなり正確に日本語訳を作ってくれます。
もしくはGoogle検索にこの文章をそのまま突っ込んでみるのもひとつの手でしょう。
エラーの内容を説明しているサイトがある場合があります。
今回はざっくり言うと「 int 型 と str型 は加算できない」という意味でした。
これがどうやら原因のようです。
エラー場所を特定する
ここまででエラーの原因に突き止めることができました。
しかし、エラーの場所が分からない事には解決できません。
ここからエラーの場所を特定していきます。
コードを順番に読んでいったログがコマンドには表示されています。
そして、エラーを発見すると途中で止まってしまいます。
つまり、エラーの内容が書いてある直前の部分に注目すれば、どこで問題が起こったのかが分かります。
今回の場合は以下の部分です。
File "errortest.py", line 6, in add_num
return num + "2"
コードの6行目のreturn num + “2”でエラーが発生していると分かりました。
実はPythonでは”2”という表記すると2が数値ではなく、文字列扱いになります。
つまり、ここを正しく数値で表記すれば解決します。
実際に変更してやってみます。
class Calculation(object):
def __init__(self, num=None):
self.num = num
def add_num(self, num):
return num + 2 # ここを変更しました
calculation = Calculation()
r = calculation.add_num(12)
print(r)
これで正しく表示されました。
C:\...\syntax_practice> py errortest.py
14
このようにエラーが発生した場合は、ログをみてどこでどのようなエラーが生じているかを確認していきます。
ログの部分に英文がたくさんあっても、注目する場所を絞って考えていけば怖くありません。
今回は非常に単純化されたエラーだったので簡単すぎたかもしれませんが、考え方は基本的には同じです。
今後エラーに出くわしたら、今回の考え方を思い出してみてください。
エラーを解決するために役立つツールは?
ここまで、エラーを解決するための方法について説明しました。
しかし、これだけでは解決できないエラーに出くわしたり、調べてみても良く分からないこともあるかと思います。
そこで何か問題が発生したときに質問できるサイトを、2つ紹介します。
- teratail
- stackoverflow
これらを使って質問してみると、誰かが問題を解決してくれるかもしれません。
teratail
teratail(テラテイル)はプログラミングに特化したQ&Aサイトです。
実現したい機能や作業中に発生したエラーについて質問すると、他のエンジニアから回答を得られます。
このサイトは日本語で質問ができるので、初心者におすすめの質問サイトです。
プログラミングに関する問題を投げかけることができます。
コミュニティーも活発なのですぐに回答をもらうことができます。
質問の記述はMarkdown記法に対応しているため、レイアウトも簡単につくることができます。
stackoverflow
By using our site, you acknowledge that you have read and understand our Cookie Policy, Privacy Policy, and our Terms of Service. Questions · Jobs · Tags · Users · Badges · Ask. All Questions.
このサイトは全て英語という特徴があります。
初心者の方には少しハードルが高いかもしれませんが、世界最大の質問サイトというだけあり情報量はかなり多いです。
このサイトで質問すると、世界中のエンジニアから回答をもらえるので、正しく質問できれば解決できない問題はほぼありません。
プログラミングは日本語の情報よりも英語の方が圧倒的に多いので、英語で情報を得られるようにしておくことは非常に重要です。
勉強しながら少しずつ英語に慣れておくことをおすすめします。
質問するときの注意点
優良な質問サイトを紹介したので、さっそく質問しよう!と思った方はちょっと待ってください。
質問する際にはコツがあります。
回答をもらいやすくするためにも、以下のことに注意してください。
自分の環境を記述する
まず、自分の使っているパソコンのOSは何を使っているかを明記する必要があります。
OSをなぜ書く必要があるか不思議に思う人もいるかもしれません。
実はOSの種類によってコードの挙動が違う場合があります。
Windows10では動かないのにUbuntuでは動くといったこともあるので、質問をする際には重要な情報になります。
また、自分が使っているプログラミング言語やライブラリーのバージョンも記載しましょう。
一つ前のバージョンでは動作するが、最新バージョンではまだ対応していない場合もあるからです。
何をしようとしてどのような結果を求めているかを明確にする
回答する人からすれば、質問者がどういう結果を求めてコードを書いているかが分かりません。
しっかり記述することで、問題を素早く解決してくれることはもちろん、よりよい書き方を教えてくれることもあります。
コードとエラー内容を明記する
どこで問題が起きているかを整理して記述してください。
質問を分かりやすくすると回答をもらいやすくなりますし、自分の頭の中を整理することにもつながります。
エラーとコードは問題に関係がある部分だけ抜粋して、必要のない部分はできるだけ外しておくことが望ましいです。
まとめ
今回は初学者を苦しめるエラーをどのように解決していけばよいかを解説しました。
エラーは作業を止めてしまう可能性もありますが、自分で調べて解決していくことで勉強になることも多いです。
もしエラーに出くわした時は成長の糧になると思って向き合ってみてください。
この記事が少しでも役に立ったと感じていただければ幸いです。
質問サイトとスクールの違い
先にもご紹介した通り、プログラミングに関してはネット上に技術者が集まる大規模の質問サイトがあるため、技術的な質問は比較的解決しやすい環境です。
しかし、質問サイトなどはどちらかというと中級者から上級者向けの学習ツールと言えるでしょう。
「質問するときの注意点」でも説明した、目的と結果やコードをしっかり記載して質問をするというのは初心者には案外難しいものです。
なぜなら、初心者のうちは可読性(読みやすさ)を意識したコードを書けなかったり、目的なども文字だけで上手く伝えることが出来なかったりするからです。
その点ではプログラミングスクールなど、特に対面で講師に直接質問できる学習環境はそういった問題が発生しにくいと言えます。
学習教材や目的などを一貫して熟知した講師がメンタリングするため、「何が」「どこが」分からないのかなど問題を的確に把握するところからサポートしてもらえるという強さがあります。
もし、質問サイトを使っての学習が思うように進まない場合は、スクールという「教育に特化」した学習環境を選んで効率化・修得することも視野に入れてみてはいかがでしょうか。
「CodeShip」の無料相談会では、現状やこれからの学習に対してプロのキャリアアドバイザーから学習する上での問題の明確化や、アドバイスのサポートを受けることができます。
まずはお気軽にご相談ください。