
エラーをうまく処理する方法ってあるの?

プログラムが異常終了するのは避けたいなぁ。
Pythonでtry文を使いたいけど、よく分からないなというかた向けに書いた記事です。
プログラミングでエラーに遭遇することがしばしばあると思いますが、今回はtry文を活用してエラーが発生したときにうまく対処する方法について説明します。
実際に私もプログラムの中でtry文を使用し、競馬予想のためのスクレイピングをしているので、この記事を読めばtry文の基礎的な使い方がマスターできるはずです。
1.try文とは
プログラム処理中にエラーを検出した場合、あらかじめ用意しておいた処理を行い、プログラム全体の処理を止めずに継続することができます。この処理のことを例外処理ともいいます。(エラー≒例外)
メリットとしては、Pythonは、プログラム実行中にエラーが発生すると異常終了してしまうので、エラーであっても適切に処理し、正常に終了させることができます。
・例外って何
この記事にたびたび登場する例外ですが、前述にもあるとおり、エラーと同じ意味として扱います。
プログラミングが本職の方のなかには、明確に定義されている場合もあると思いますが、ググってみた感じエラーと例外の境界線もあいまいで、個人や企業さんなどの文化によって解釈もまちまちなです。
なので、この記事で定義を語ることをスルーします。
ただ、例外の種類は様々あり、例外のケースごとで処理を分けることになるので、種類については代表的なものを紹介しておきます。
例外の種類 | 説明 |
SyntaxError | 構文エラー。文法としての間違っている。 |
IndentationError | if文などのインデントが正しくない。 |
AttributeError | 属性参照に関するエラー。 プログラム上で存在しない(定義されていない)属性を参照しようとした場合など。 |
TypeError | データ型の間違い。 演算や組み込み関数の処理で、不適切な型が使われた。 |
ValueError | 型は合っているが、不適切な値が使われた。 |
IndexError | リストなどに格納された値を、indexで取得する際に範囲外の位置(要素数)を指定した。 |
KeyError | 辞書(dict型)の値をキーを指定して取得する際に、存在しないキーを指定した。 |
SyntaxErrorやIndentationErrorは、そもそもプログラムとしてよろしくないので、try文で対応するのではなく、事前に自分が書いたコードをチェックするようにしましょう。
2.try文の書き方
try文の基本的な構文と、覚えておくと便利な構文をいくつか紹介します。
・基本的な書き方(try except)
最もシンプルな構文です。
tryで本来、実行させたい処理を記述し、except文にエラーが発生したときの処理を記述します。
except文では、エラーを指定しておく必要があり、該当のエラーが発生した場合はexcept文の処理が実行され、エラーが発生しない場合や別のエラーの場合は実行されません。
なお、except文は複数記述できます。
以下にサンプルコードを記載しておきます。
サンプルコードでは、入力した値が変数 x と y に代入され、2つの変数を加算しています。
正しく数値が入力されればよいのですが、誤って文字を入力してしまった場合はエラーになります。
エラーになった場合、入力した人間にチェックを促すようにしています。
print("ひとつめの数字を入力してください") x = input() #たとえば"a"などの文字を入力するとエラーになります。 print("ふたつめの数字を入力してください") y = input() try: goukei = int(x) + int(y) #変数xとyをint型に変換し加算 except ValueError: print("入力した値は正しいですか?")
・例外後の処理に正常処理を書く(else)
例外が発生しなかった場合に処理する内容を記述する場合、elseを使用します。
先ほどのサンプルコードをここでも使用します。
print("ひとつめの数字を入力してください") x = input() print("ふたつめの数字を入力してください") y = input() try: goukei = int(x) + int(y) except ValueError: print("入力した値は正しいですか?") else: print(goukei) #正常処理として加算した値を表示
・例外後の処理で何もしない(pass)
基本的にtry文では例外処理を記述する必要がありますが、何もさせたくないときはpassを使用します。
例外処理を後で実装する場合にも有効です。
print("ひとつめの数字を入力してください") x = input() print("ふたつめの数字を入力してください") y = input() try: goukei = int(x) + int(y) except: pass #入力値に文字を入力しても、何も処理されずプログラムは終了します。 else: print(goukei)
・最後に必ず処理を実行させる(finally)
例外、正常処理を問わず必ず実行させたい処理がある場合は、finallyを使用します。
使い方は以下のとおりです。
print("ひとつめの数字を入力してください") x = input() print("ふたつめの数字を入力してください") y = input() try: goukei = int(x) + int(y) except ValueError: print("入力した値は正しいですか?") else: print(goukei) finally: print("処理が終了しました") #例外処理、正常処理のどちらが終了しても表示
・まとめ
try文の使い方を簡単なサンプルコードをお見せしながら説明してきました。
try文はエラーが発生しても処理を止めずにプログラムが実行できるので、適切に活用することで異常終了することのないコーディングが可能です。
try文を活用して、エラーにうまく対応できるコーディングを心がけましょう。
「うまのいえ」では、今後もWebスクレイピングのネタを中心にブログを更新していきます。
また、足を運んでいただけると喜びます。
ご清聴ありがとうございました。