Python プログラミング

エラーを正しく処理しよう【Python超初心者用】

プログラミングを始めるとたくさんのエラーと出会います。超初心者でなくてもプログラミングはエラーとの戦いですが、最初はいきなりエラーが出ると不安になると思います。しかしビビる必要はまったくありません。エラーについて正しく知って、正しく処理できるようにしていきましょう。

Pythonのエラーとは?

コンピューターはプログラムの書かれた順番に上から処理をしていきますが、途中でPythonが理解できない文や処理できないデータ等が出るとそこで止まってしまいます。これが「エラー」です。

エラーが起きたときは、エラーの起きた場所とその原因を探し出して、プログラムを修正しなければなりません。難しそうに感じるかもしれませんが、Pythonはどこでどんな問題があったかをちゃんと教えてくれますので、心配はありません。

ただ、全部英語なので難しく感じるんですね。

よく出るエラーの種類はそれほど多くありませんので、慣れてしまうのが一番です。

Pythonの構文エラーと例外

Pythonのエラーは「構文エラー(syntax error)」と「例外(exception)」に分けられます。

「構文エラー」はその名のとおり、構文(文法)が間違っている(Pythonのルールに従ってプログラムが書かれていない)ことを表します。

一方の「例外」は構文として正しくても、Pythonが処理できない場合に発生します。「構文エラー」はそもそもプログラム実行以前の話で、「例外」は実行中に起きる問題と考えればいいと思います。

構文エラー(syntax error)

初心者のうちは単純なミスでよく遭遇するはずです。カッコを閉じるのを忘れたり、文字列にクォーテーションマークを付け忘れたりすることで発生します。

下記の例では文字列を囲む後のシングルクォーテーションを忘れていますね。

IDLEでは図のようにエラーが発生したことを教えてくれます(全部英語ですが)。この例では、「構文エラー(SyntaxError)がありますよ」「文字列をスキャンしてたら最後(EOL:End of Line)まで来てしまったよ」と言ってます。閉じるクォーテーションが無いので、文字列がどこで終わりか分からず、最終行まで来てしまったんですね。

日本語入力をする場合、閉じるクォーテーションマークを全角のままにしてしまい、エラーとなることがよくありますので気を付けましょう。

ちなみに高機能なIDEを使っていれば補完機能で、事前に間違いを指摘してくれる場合が多いです。このサイトではシンプルなIDEであるIDLEの使用をおススメしているのですが、これらエラーに慣れるためというのもひとつの理由です。最初のうちはIDEの機能に頼らず、積極的にいっぱい間違えた方がいいと思います。

IDLEについては別記事で解説しています。

例外(exception)

Pythonの構文(文法)に誤りは無いけど、プログラム実行中に問題があると発生します。

例えばユーザーに数字を入力してもらい、その数字をもとに何か処理をするというプログラムを書いた場合に、ユーザーが文字列を入力してしまって、問題が発生するようなケースが考えられます。

何も対応をしなければ、例外が発生するとプログラムはそこでストップしてしまいますが、構文エラーと違い、例外の場合はプログラムを終了させずに対処することができます。

「例外が起こったらこのように処理しなさい」というプログラムを記述します。

プログラミングをするときは、例外が起きたときどう処理するかを常に考えていなければなりません。

エラー処理の仕方(tryとexcept)

例外が起きた場合にどう対処するかを記述しておくことを「例外処理」といいます。

このとき使用するのが「try文」です。

try節とexcept節(複数可)から成り、最初にtry 節が実行されます。例外が発生しなければexcept節はスキップされ、指定した例外が起きるとexcept節のコードが実行されます。

try節には「try:」のあとに例外が発生するかもしれないコードを記述し、except節には想定されるエラーとその時の処理を記述します。

エラーが発生する例を見てみましょう。整数を0で割り算をしようとするとエラーが起きます。

3を0で割ろうとしたら「ZeroDivisionError」と表示されました。ゼロで割ってるよと注意されたようです。

これを回避する書き方の例として、ユーザーに体重と身長を入力してもらい、BMI値を求める簡単なプログラムを作ります。

(BMI値は体重 / (身長**2)で求められます)

想定される例外(ZeroDivisionError)をexceptの後に書いて指定し、その時の処理を記述します。

この例では、仮に身長を0と入力しても、エラーは起こりません。1以上の整数を入力してくださいと表示されます。

もうひとつ考えられるエラーは文字列の入力ですね。体重を入れろと言っているワケですから、文字を入れる人はいないだろうと勝手に期待してはいけません。あらゆるエラーの可能性を排除するべきです。

このプログラムで文字を入力した場合は「ValueError」が起きると考えられます。

2つ以上の例外が想定される場合はexceptの後にカッコを追加し、そのカッコ内に想定される複数の例外を記述し、カンマで区切ります。

ちなみにIDLEの対話シェルではinput関数で数値を受け取ることができませんので、上のプログラムは保存して実行してください。

無限ループ

エラーとは少し違いますが、ちょっとした記述のミスで、プログラムが同じ処理を繰り返してしまい、永久に終わることができない状態をいいます。

パソコンに負担もかかりますので、無限ループが発生しないよう注意しましょう。

プログラミングの強力な機能に、「反復処理(ループ)」があります。同じモノをいくつか出力したい場合、Pythonは100回でも1000回でも簡単に、一瞬にして実行することができます。詳しくは別途解説しますが、指定した条件に当てはまる間実行を繰り返す処理が「反復処理(ループ)」です。

適切な処理を書かないと、この繰り返しの処理から脱出できなくなり、無限ループが起きてしまいます。

もし、無限ループが発生してしまったら「Ctrl + C」で止めることができますので、覚えておきましょう。

-Python, プログラミング