IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

ゼロから歩くPythonの道

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第40回 Pythonプログラムでエラーが発生!構文エラーと例外とは? (菱沼佑香) 2023年7月

こんにちは、吉政創成 菱沼です。
ゼロから歩くPythonの道」で、超初心者がPythonを学ぶという学習コラムを書かせていただいてきましたが、昨年末に学習に使用していた冊子を終了することができました。ありがたいことに多くの方にお読みいただいたようです。お付き合いいただき、本当にありがとうございました。

今回からは「きれいなPythonプログラミング(マイナビ出版)」という書籍を利用して学習することになりました。こちらの書籍は誰にでも読みやすいコードを書けるようになることを目的とされている書籍のようです。これまで動くものを作れることを優先して学んできましたが、ここからは誰でも読みやすいコードを書く方法を学んでいくことになりますので、以前学習したものも改めて学びなおす場面もあるかと思います。引き続き、超初心者の方にお付き合いいただけましたら幸いです。

エラーメッセージが出たとき、どうやってプログラムを直す?

1章はエラーメッセージの読み方や、エラーが出たときにどうやって解決してくかという内容です。
(エラーメッセージについては以前にも学習していますので、基礎的な部分を知りたい方はぜひそちらも一緒にご一読ください。)

さて、エラーメッセージからプログラムの問題のある個所の特定する方法として、書籍ではトレースバックの検証とインターネットでの検索が必要と書かれています。

------------------引用------------------
P.4 Pythonのプログラムは、except文で処理できない例外が発生したときにクラッシュします。例外が発生すると、例外のメッセージとトレースバックが表示されるようになっています。トレースバックはスタックトレースとも呼ばれていて、プログラムのどこで例外が発生したのかということと、それまでにどんな関数が呼び出されたのかという履歴が表示されます。
-----------------------------------------

まず、except文とは何か調べると、例外というエラーが発生したときに行う、「例外処理(exception)」の設定を行う際に使うもののようです。
以前学習したときに出てきたのは構文エラーが中心で、例外処理については軽く触れた程度だったと思いますので、まずはこのあたりについて改めて確認していきたいと思います。

Pythonで出てくるエラーには構文エラーと例外がある

さて、実際にプログラムを作るときに起きるエラーには次の2種類があります。

①構文エラー(SyntaxError)

これは以前学習した、構文の誤りによってプログラムが動かない時に出るエラーになります。
例えば次のようなエラーです。(上が問題なく動くもので、下はエラーが発生するように書いたものです。)

fig01

これは()がないよ!という文法エラーです。
ちなみにPython2.0代であればprint文だったので()は要りませんが、Python3代ではprint関数になりましたので、()が必要になっています。

②例外(exception)

こちらはコード自体には問題がないものの、実行中にエラーが発生してしまう状態のことのようです。
例えば、2÷4と、10÷0という計算をしてみますと、このような結果になります。

fig02

どちらも計算式自体には問題がありませんので、2÷4のように通常であれば問題なく完了します。ただ、0で割る計算は存在しないもののため、コードがあっていたとしても10÷0はエラーになってしまいます。
こういった、コード自体には問題がないけれど、動かしたときにエラーが発生してしまうような状態が「例外」と呼ばれ、例外が起きてしまう状態を回避するには、try文のexcept節を使って例外が発生したときにどう対処するのかを記述することになります。そこでどうやって書くのか調べて出来たのがこちら。

fig03

真っ先にZeroDivisionErrorが発生するものですが、例外処理を行ったことで問題なく先に進めました。
補足)f-stringとformat

ところで、print(f"{a}÷{b}の結果は「{c}」")ですが、「f」や「{ }」が入っており、これまで学習した中で出てきたことがない書き方です。これはf-stringというフォーマット済文字リテラルで、バージョン3.6で追加されたものだそうです。これができるまではformatメソッドが使われることが多かったそうですが、最近はこちらのf-stringが使われるケースが多いとのこと。
例えばf-string、format、どちらも使わないケースを書いて並べるとこうなります。

fig04

最後のものが過去の学習で使っていたものですね。
こうしてみるとf-stringを使ったときのシンプルさと読みやすさが一目瞭然ですね。ぜひ覚えたい手法です。

【参考サイト】
8. エラーと例外|Pythonチュートリアル
7.1.1. フォーマット済み文字列リテラル|Pythonチュートリアル
Pythonのtry文とexceptによる例外処理の方法|HEADBOOST
Pythonのf文字列の使い方|GAMMASOFT
Python3.10の目玉はmatch文、新バージョンは焦らず状況を見て使っていこう|マイナビニュースTech+
Pythonのf文字列(フォーマット済み文字列リテラル)の使い方|note.nkmk.me

バージョン3.10からエラーメッセージが丁寧になる!?

ところで、現在のPythonの最新バージョンは3.11ですが、3.10以降からエラーメッセージを丁寧で解りやすいものに変えていこうという動きが活発なのだそうです。ちなみに私が現在利用しているのは3.9ですが、以前エラーメッセージを学習した時点では3.8を利用していました。
カツオちゃん宣言の時点で、「あれ?こんなに親切なメッセージだったかな?」と疑問に。さすがに当時カツオちゃん宣言はしていないので、1+2で確認。

3.8時点でのエラーメッセージがこちら。

fig05

そしてこちらが3.9でのメッセージです。

fig06

(わかりやすいかどうかは置いておきますけども)やっぱり変わってる!!!
ということで、いつから修正されていたのかはわかりませんが、あくまで活発になったのが3.10ということで、実は少しずつ手が入っていたのかもしれません。
そういえばそろそろバージョンアップしようかなと思う今日この頃。新しいバージョンでわかりやすいエラーメッセージになっているのであれば、初心者の私にとって、どこが悪いのか把握しやすくなって助かりますし、最新バージョンではパフォーマンスも上がっているらしいのでぼちぼちバージョンアップしてみようかなと思います。
という事できりがいいので今回はこちらで終了です。お付き合いいただきありがとうございました。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes