プログラミングを学んでいるときに悩まされるのが、さまざまなエラーです。
プログラミングの勉強をしたことが少しでもある方は、みなさん苦労してコードを書いたのにエラーが出てうまく実行できない、エラーの意味がわからなくてどこをどう修正したらよいかわからないといった経験をしたことがあるでしょう。
「エラーメッセージを見ても全部英語でなにが書いてあるかわからない!」という方も多いかと思いますが、よく発生するエラーにはいくつかのパターンがあります。それさえ把握してしまえば、プログラミング初心者でも「このあたりのコードでこういうミスをしているのかな?」と素早く的確な対処ができるようになるでしょう。
今回は、プログラミング初心者向けにPythonにおけるエラーのパターンとその対処方法について解説します。
Pythonを勉強しているプログラミング初心者の方や、エラーに悩まされている方の参考になればと思います。
Pythonとは
Pythonは比較的シンプルで短く、初心者でも直感的に理解しやすく学びやすい構文のプログラミング言語です。またPythonは構文がわかりやすいだけでなく、さまざまな用途に対応した言語です。たとえばWebアプリケーションフレームワークを使ってWeb開発ができるのはもちろん、エンジニア以外の人がExcelやWordなどでの作業を自動化することも可能です。
ほかにも便利なライブラリが充実しているため、機械学習やデータ分析、競技プログラミングなどでも多く活用されています。こうした便利なものがあらかじめ提供されていることも、Pythonの人気が高い理由の一つだと言えます。
Pythonでよく発生する5つのエラー
ここからは、Pythonでよく発生する構文エラーについて解説します。構文エラーとはその名の通り、コードのどこかに正しく実行できない誤りがあるときに発生するエラーです。構文エラーが発生している場合、そのコードは該当箇所を修正しなければ実行できません。
構文エラーのエラーメッセージはすべて英語ですが、それほど難しい文章が出てくるわけではありません。落ち着いて読めば、間違っている箇所と間違っている内容がわかるはずです。よく発生するエラーのパターンを把握しておけば恐ることはありません。
一言で構文エラーといってもさまざまな種類がありますが、ここではよく発生するエラーを5つご紹介します。
SyntaxError(文法エラー)
Pythonの文法的に間違った記述がされている場合に発生するエラーです。
たとえば必要な場所にコロン( : )がない、括弧を閉じ忘れているなどといった場合に発生します。
SyntaxErrorが出た場合は、該当する行のコードにおかしな記述があるはずです。よく見直して修正しましょう。
たとえば以下のコードは print のあとの括弧を閉じ忘れているため、「Pythonとして処理できない構文だ!」と判定されてしまいSyntaxErrorとなります。
# Hello World!を表示する print('Hello World!'
IndentationError(インデントエラー)
Pythonでは、インデントによってコードを一つのブロックとして扱います。そのためインデントは非常に重要で、ずれがあるとIndentationErrorとなります。
IndentationErrorが出た場合は、該当する行のコードにインデントがずれている記述があるはずです。よく見直して正しいインデントに修正しましょう。
なおインデントを重視するのはPythonならではの特徴で、プログラミング言語の中にはインデントがずれていてもまったく問題なく実行できる言語も多くあります。ほかの言語も並行して勉強している人は、混同してしまわないように注意しましょう。
例えば以下のコードは print( "1だ!") のインデントがずれているため、IndentationErrorとなります。
number = 1 if number == 1: print( "1だ!") print( "スキ!") else: print( "1以外だ!") print( "キライ")
NameError(名前エラー)
NameErrorは、該当する名前の変数が存在しなかった場合に発生するエラーです。
Pythonでは、変数名などにおいて大文字と小文字が区別されています。そのため、例えば変数 a を間違えて A として記述してしまうと、NameErrorとなってしまいます。
NameErrorが出た場合は存在しない変数を呼び出したり、変数名の記述を間違ったりしている箇所があるはずです。よく見直して修正しましょう。
たとえば以下のコードは number という変数をif文の中で Number と記述しているため、「そんな変数はない!」と判定されてしまいNameErrorになります。
number = 1 if Number == 1: print( "スキ!") else: print( "キライ")
TypeError(型エラー)
TypeErrorは、異なるデータ型同士の演算や処理に対して発生するエラーです。
たとえば以下のコードは 変数aが数値、変数bが文字列で違う型にも関わらず演算処理をしようとしているためTypeErrorとなってしまいます。
a = 1 b = 'hello world!' a + b
TypeErrorが出た場合は変数にふさわしくない処理をしていないか、処理をする変数を間違えていないか、変数の型宣言を間違えていないか確認して修正しましょう。
プログラミング言語の中には、変数を宣言する際に型の指定が必須の言語も多くあります。しかしPythonでは型を指定しなくても変数を宣言できるため、こうしたTypeErrorが起こりがちです。
TypeErrorを防ぎつつコードの可読性を向上させるためには、Pythonでも型宣言をしたほうがよい場合があります。
以下のコードでは、aを正数、bを文字列として宣言しています。
a : int = 1 b : str = 'hello world!'
IndexError(インデックスエラー)
IndexErrorはリスト型やタプル型に対して、存在する要素の数を超えたインデックス値を指定した場合に発生するエラーです。
IndexErrorが出た場合は、指定するインデックス値がおかしくなっていないか、もしくは指定するリストを間違えていないか確認して修正しましょう。
たとえば以下のコードでは、numberというリストには要素が4つしかないのにそれ以上のインデックス値を指定して表示させようとしているため、「このリストにそんな要素はない!」と判定されてIndexErrorとなってしまいます。
number = [1, 2, 3, 4] print(number[10])
Pythonでエラーを減らすには
プログラミングを学ぶ上で、エラーは避けて通れないものです。プログラミングを学び始めたばかりの初心者はもちろん、ベテランのエンジニア経験者でもさまざまなエラーを出しながら日々プログラミングをしています。
エラーはコードの間違いを指摘してくれる重要なものです。エラーが発生したら「また間違えてしまった」「いやだな」と思うよりも、「修正することでまた一つ知識を身につけられた」「これでもっとよいコードが書けるようになった」と考えるようにするとよいでしょう。
なおケアレスミスによるエラーを減らすには、以下のような対策があります。
変数名や関数名はわかりやすく
たとえばa,b,c…といった変数名やmethod_A,method_Bといった関数名でも、構文としては間違いではありません。しかしこうした変数名・関数名では意図や機能がわからないため、使い方を間違えてなんらかのエラーを発生させる原因となってしまします。
変数や関数を命名する際は、目的や機能などが一目でわかるような名前をつけるようにしましょう。
コメントで補足する
複雑な処理をしている部分などは、コメントで補足の説明をしておくとどこでなにをしているかがわかりやすくなり、エラーの減少にもつながります。
ただし実務でチーム開発をしている場合、個人個人がそれぞれのルールでコメントをつけてしまうとコメントの付け方に統一感がなくなってしまいます。
これを防ぐために多くの開発チームではコメントやコードの書き方をコーディング規約として定めています。エンジニアとして就職・転職した場合、コメントの書き方などはこのコーディング規約に従うようにしましょう。
Pythonでエラーの防ぎ方や対処法が学べる学習コンテンツ
新・Python入門編
初心者オススメ度:★★★★★
paizaラーニングの新・Python入門編は、未経験者でも1回数分程度の動画を見ながらPythonを使った基本的なコードの書き方が学べる講座です。
変数や四則演算、ループ、条件分岐、配列、関数、クラスなど、ほかのプログラミング言語でも共通する処理の概念はもちろん、Pythonに特化した機能もしっかり学習できます。
また「新・Python入門編7: リストを学習しよう」ではIndexError、「新・Python入門編10: 条件分岐を学習しよう」ではIndentationErrorについて詳しく解説しています。講座の中ではそれぞれの処理を行う際に起こりがちなエラーについても解説がありますので、エラーについて学びたい人にもオススメです。
The Python Tutorial
初心者オススメ度:★★★☆☆
Pythonは公式ドキュメントのチュートリアルも充実しています。実行環境等を手元で準備した上で書いてある内容を試していく必要がありますが、日本語にも対応しています。
チュートリアルの中にも構文エラーや表現エラーなどに関する記述がありますので、エラーについて学ぶこともできます。
公式ドキュメントをもとにPythonの知識を学びたい方、実行環境はあるのでチュートリアルをやってみたい方、ほかのプログラミング言語を学習した経験がある人にオススメです。
Progate
初心者オススメ度:★★★★★
Progateはイラスト中心のスライドを見たりオンラインエディタで問題を解いたりしながらプログラミングを学べる学習サービスです。
見本や解説を見ながら問題に挑戦できるので、Python初心者でも無理なく学習を進められます。Pythonの学習コースは5つあり、初心者でも気軽にプロラミングの基本とPythonの書き方が学べます。
レッスンの中ではただプログラミング問題を解くだけでなく、じゃんけんゲームや料理注文システムをつくることができます。
エラーを恐れずPythonプログラミングを学んでみよう
前述の通り、プログラミングを学ぶ上で、エラーは避けて通れないものです。エラーを恐れずたくさん手を動かしてコードを書き、さまざまなエラーに対処することで着実にプログラミングスキルが身につきます。またPythonは実務でも人気があり需要の高い言語です。習得できれば、エンジニアとして就職・転職できる可能性も高まるでしょう。
「エラーどころかこれからPythonの学習を始めるところなんだけど」「まずはPythonに触れてみたい」というプログラミング初心者の方には、paizaラーニングのPython入門講座がオススメです。
「paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。
詳しくはこちら