こんにちは、うしまるです。
今日もPythonの勉強を一緒にしていきましょう!
今日のテーマは、「Pythonのエラーと例外について」です。
では、さっそくみていきましょう!
Pythonのエラーとは?
エラーに遭遇したことはある?
Pythonでコードを記載していくとき、エラーメッセージに出会ったことはありますか?
中には、なかなか原因がわからず途方にくれてしまうこともあったかと思います。
プログラム学習において一番挫折しやすいのがこのエラーをいかに解消していくかにかかっています。
特に、仕事としてコードを書いている場合は、何が何でも原因を追求して、解決することが求められますので学習時にも、エラーを解決できるように練習しておくといいですね。
エラーの種類は2つ
Pythonで、エラーと呼ばれているものは、大きく2つあります。
- 構文エラー(syntax error)
- 例外(exception)
今回は、この2つについて解説していきます。
構文エラー(Syntax Error)とは?
構文エラーについて
構文エラーは、別名構文解析エラー(parsing error)とも呼ばれ、Pythonでコードを書くときに遭遇するエラーになります。
簡単に言うと、Pythonのプログラム記述ルールにあっていないプログラムを書いて、実行したときに発生します。
構文エラーの例
実際に、VSCodeを使って構文エラーを発生させてみます。
変数testvalueに、文字列型のデータを代入する想定で試してみました。
本来は、設定する文字列の記載が終わったら、文字列の間を「”」で囲ってあげないとダメなのですが、つけ忘れしたことでエラーとなります。
VSCodeでは、ある程度入力補完機能がついていますので、赤文字の「~~~」がついている部分が事前にわかるのは便利です。
もし、実行してエラーがでても赤枠で囲っている部分のようにどこが問題なのかをエラーが発生している行数と、発生箇所を「^」を使って表現してくれます。
ただし、場所が微妙にちがったり、そもそもその場所が原因でない場合もありますが、大抵はエラーが発生している箇所の前後や前の処理の結果を分析することで、原因を見つけることができます。
例外(Exception)とは?
例外について
例外は、主に作成したプログラムを動かし始めた段階や、本番環境で稼働し始めた段階で発生することが多いです。
簡単に言うと、コードの書き間違えはしていないが、なにかの条件のときは正しく動作できなくなった場合に発生します。
まずは例外の代表的な例についてみていきます。
- ZeroDivisionError … 0で割った時のエラー
- NameError … 名前が見つからない時のエラー
- TypeError … データ型の違いによるエラー
ZeroDivisionError
割り算や剰余計算で、割る側が0だった場合に発生するエラーです。
今回は変数valueに、10を0で割った値を代入しようとしてみました。
画像のように、ZeroDivisionErrorが出力され、途中で処理が止まっています。
実際こういったデバックのときは停止するので開発者も気づくのですがこれが、下の場合だとどうでしょう。
コードを書いた段階では、変数inputvalue1と変数inputvalue2には、どんな数値が入るのかわからない状態での実装と仮定します。
このとき、変数inputvalue2に数値0以外が入ってきたときは正しく動作するのですが、数値0が入ってきた瞬間動作を停止します。
これが実際のソフト上の動作だとすると、Windowsとかでたまにある、動作を停止しましたとか応答がありませんとかいいう状態になります。
NameError
名前を定義していないものを使ってしまった時に発生してしまうエラーです。
開発現場で起きやすいのはタイプミスや並行開発時のインターフェース資料の改定連絡ミスなどで結合したら関数の名前変わってる~といったときに発生しますね。
とはいいつつもわりとコードを書いている時に気づけそうな例外なので、作ったあとに軽く動かしてみればすぐ発見できそうなので流出はしなさそうなエラーです。
VSCodeを使って動かしてみました。
今回のパターンでは、計算式の中にいきなり新しい何も設定していない変数inputvalue3を追加したことでNameErrorが発生しています。
C言語系だとわりと定義は予めしていないとそもそもビルドが通らないことが多いので動かす段階でこういったエラーには遭遇することはめったに無いわけですが、そういった定義をしなくていいPythonでは見かけることは多いかもしれませんね。
TypeError
代入をするときや、計算をするときに、それぞれ違うデータ型同士の変数を扱った時に出るエラーになります。
Pythonの場合は、出力文字列生成とかで置きやすそうなイメージですね。
例えば、現在は何月?みたいなものを出力させたいとします。
この時、何月?の回答の場合、文字列は何月だろうと「月」で表現できるので予め固定文字列として変数strvalueに設定しておきます。
そして今月が何月かを取得する処理で数値型として6が取得できるとします。この結果を変数ivalueへ設定しておきます。
では、出力結果変数outputvalueに何月か?の答えを結合して表示させたら…
TypeErrorが表示されました。
Pythonでは、変数に様々なデータ型を設定することができるのですが、結合するときなどは同じデータ型で取り扱って上げる必要があります。
今回の場合は、整数型(int)と文字列型(str)を結合しようとしたことでエラーとなっています。
これはivalueを文字列データ型へ変換するstr()メソッドを使ってあげると無事に動作させることができます。
まとめ
今回は、Pythonの構文エラーと例外について解説しました。
本日のポイント
- Pythonのエラーは、構文エラーと例外の大きく2種類!
- 構文エラーや例外が発生すると最悪作ったプログラムが動かなくなるよ
近日中に、例外処理の対処方法についても紹介していこうと思いますのでお楽しみに!
では、今回はこのへんでノシ
コメントを残す
コメントを投稿するにはログインしてください。