プログラミング

Python – tryとexceptの活用例(pass/print/traceback)【超簡単】

*本サイトはアフィリエイト広告を利用しています。

初心者の方向けに、tryとexceptの超簡単な使い方をお伝えします。

tryとexceptを使いこなせれば、プログラム実行中に不要なエラーで止まることを回避できます。

これにより、pythonで自動化プログラムを動かしているときに、気が付いたら裏で止まっていたなどということを減らすことができます。不要なエラーで度々止まってしまうと効率が悪いですし、ストレスも溜まりますので、使い方を知っておくと便利です。

また、巨大で複雑なプログラムの動作確認などにおいても、チェックしたいプログラム以外にtry/exceptを用いることで、小パートごとに動作チェックするのにも活用することができます。

この記事では、tryとexceptの「超シンプルで使い勝手が良いサンプルコード」を、活用例を用いて分かりやすく紹介したいと思います。

例題について

例題

まず例題として、a=1、b=1/a、という、簡単な割り算をベースに考えていきたいと思います。

 a = 1
 b = 1 / a
 print(b)
    ----------------------------------------------------
    出力 : 1.0

この場合、print(b)は、b = 1 / a = 1 / 1となるので、「1.0」が表示されます。

発生するエラー

次に、このような簡単な割り算において、どのようなエラーが発生するかを考えてみます。

割り算の場合は、aに代入される値によっては、2つのエラーパターンが生じます。それぞれについて解説したいと思います。

「エラー①: a に”文字”が入力されたとき」

 a = “文字”
 b = 1 / a
 print(b)
 ————————————————
    TypeError: unsupported operand type(s) for /: ‘int’ and ‘str’

b = 1 / a において、aが数字(int型)ではなく、文字(str型)が入力されるため、タイプが違うので割り算できないというエラーが発生します。

 ⇒この時のエラー表示は「TypeError」となります。

「エラー②: a に0が入力されたとき」

 a = 0
 b = 1 / a
 print(b)
 ————————————————-
    ZeroDivisionError: division by zero

b = 1 / a において、aに0が代入された場合、0で割り算できないというエラーが発生します。

 ⇒この時のエラー表示は「ZeroDivisionError」となります。

tryとexceptの超シンプルなコード紹介

tryとexceptの活用例①
(except+pass)

先ほどのような簡単な割り算においても、 「TypeError」 や「ZeroDivisionError」といったエラーが発生すると、プログラムは停止してしまいます。

このようなプログラムの停止を回避したい場合に「tryとexcept」を活用します。

最もシンプルな書き方は下記となります。

 try:
      a = “文字”
      b = 1 / a
      print(b)
 except:
         pass
 ——————————————–
    出力: なし

tryとexceptというのは、「tryのなかの構文を実行していく際に、もし、うまく実行できた場合はそのまま何事もなかったように処理を進めるが、もし、try中にエラーが発生した場合はexcept処理へ移行するというコード」です。

今回の例では、b = 1 / aの計算のところで、「TypeError」が本来は発生しますが、tryのなかなので、それを無視してexcept処理へと移行し、passを実行することになります。

passというのは、何もしないということです。なので、except処理では、何も出力されずに次へと移るので、プログラムは継続動作することができます。

tryとexceptの活用例②
(except+print) ←初心者にオススメ!!

活用例①(except+pass)では、実際にエラーが発生したのか発生しなかったのかが分かりづらいです。

この対策として、exceptのところにprintを入れることで、try中にどのようなエラーが発生したかをexcept処理で知らせることができます。

 try:
      a = “文字”
      b = 1 / a
      print(b)
 except:
         print(“try中にエラー発生、except処理実行”)
 ——————————————–
    出力: try中にエラー発生、except処理実行

except+printでは、出力にエラー内容を表示することができるので、エラーログを残しておくという意味では、使い勝手が良くオススメです。

tryとexceptの活用例③
(except+traceback) ←初心者~中級者までオススメ

もう少しレベルを高くした万能コードを紹介したいと思います。

先ほど紹介した活用例②(except+print)では、try中にエラーが発生してexcept処理したことを、自分でprintに予めコメントし表示させています。

これに対して、ここで紹介するのは、try中にどんなエラーが発生したかを、pythonから教えてもらう方法です。

つまり、今回の例題でいうと、発生したエラーが、TypeErrorなのか、ZeroDivisionErrorなのか、それ以外なのかを教えてくれるイメージです。

コードは下記のようになります。

 import traceback
 
 try:
      a = “文字”
      b = 1 / a
      print(b)
 except:
         traceback.print_exc()
—————————————–
 出力:
 Traceback (most recent call last):
 File “<stdin>”, line 3, in <module>
 TypeError: unsupported operand type(s) for /: ‘int’ and ‘str’

まず、tracebackをインポートします。さらに、except処理において、tracceback.print_exc()と入力します。これにより、try中に生じたエラー内容を出力することができます。

上記コード例は、a=”文字”の場合なので、出力に「TypeError」と表示されます。

もしも、a=0とした場合は、出力に「ZeroDivisionError」と表示してくれます。

このように、トレースバックを活用することで、エラー内容をpython側から教えてくれるので便利です(若干エラーコメントが長いのが嫌ですが・・・)

また、エラー内容を詳しく知ることは、コードの修正や変更が必要かの判断にも展開できるので便利です。

トレースバックについて詳しく知りたい方は、Yohei.M NETさんのサイトが分かりやすかったので紹介しておきます↓
[Python] 例外処理のやり方と、スタックトレース取得の実装方法 – YoheiM .NET

参考:tryとexceptの一般的なコード書き方は? (使いづらいです)

tryとexceptの活用例④
(except+エラー内容)

参考までに、pythonの教科書や、ウェブで紹介されているコードの書き方も説明しておきます。

 try:
      a = “文字”
      b = 1 / a
      print(b)
 except (TypeError , ZeroDivisionError):
      print(“tryエラー発生。except実施”)
———————————————–
 出力: tryエラー発生。except実施

この方法は、exceptのあとのところに、予めエラー内容を自分で入力しておく必要があります。複数エラーを登録する場合は、( , , , )という形で、カッコとカンマで増やしていきます。1つのエラーの場合は()カッコを省略可能です。

ちょっとコードが複雑になってしまいますね。。。

あと、エラー記載内容が間違っていた場合は、exceptのところでエラーが発生し、プログラムが停止されてしまいます。

それは、下記のような場合です。

 try:
      a = “文字”
      b = 1 / a
      print(b)
 except ZeroDivisionError:
      print(“tryエラー発生。except実施”)
————————————————
 TypeError: unsupported operand type(s) for /: ‘int’ and ‘str’

この場合、try中のb = 1 / aのところで「TypeError」が発生し、except処理へ移行した際に、TypeErrorが登録されていないので、そこでエラーが発生して止まってしまいます。

初心者にとっては、エラー内容やコマンドも良く分かっていないのに、エラーコードに予め入力するのは難しいです。

では、なぜこのような難しいコードの書き方を、教科書やウェブサイトで紹介されるのかというところをメリット・デメリットで考察しましたので記載しておきます↓

「記載方法がexcept+エラー内容:でのメリット」

try中のエラー発生の内容を事前に特定しておき、そのエラーが発生した場合はexcept処理するが、もしも予期しないエラーが起こった場合はexpetの箇所でプログラムを中断/停止となるので、安全面や信頼面で優れている。

「記載方法がexcept+エラー内容:でのデメリット」

個人用の簡易プログラミングでは、そこまで安全面や信頼面の必要はない場合が多いのに対し、プログラミング中の構文が複雑なってしまいます。また、tryとexceptを設定しているにかかわらず、エラー記載の抜け漏れで度々プログラムが停止してしまいます。

安全面と信頼面のところは、トレースバックでエラー内容をログとして残せるので、個人用としては、活用例③のトレースバックを使うことで安全面や信頼面もある程度高めつつ、利便性とも両立ことができると考えています。

さいごに

今回、初心者の方向けに、tryとexceptの超簡単な使い方をお伝えさせていただきました。

Pythonを早く身に付けたい人は

Python初心者はUdemy動画での勉強がおすすめです。

アメリカの現役エンジニアが、業務で使えるコーディングを基礎から丁寧に教えてくれます。




プログラミングの学習相談

プログラミングの独学は挫折する確率が70%と言われており非常に高いです。

専門用語が多く勉強の仕方も良く分からないのが原因です。独学での学習が捗らない方は学習方法の相談をプロにしましょう。

おすすめは無料で相談できる下記です。



★プログラミング学習で悩んでいる人


★ITエンジニア転職まで考えている人



タイトルとURLをコピーしました