【Python】競馬予想のためのtry文

プログラミング

 

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

プログラムが異常終了するのは避けたいなぁ。

 

Pythonでtry文を使いたいけど、よく分からないなというかた向けに書いた記事です。

プログラミングでエラーに遭遇することがしばしばあると思いますが、今回はtry文を活用してエラーが発生したときにうまく対処する方法について説明します。

実際に私もプログラムの中でtry文を使用し、競馬予想のためのスクレイピングをしているので、この記事を読めばtry文の基礎的な使い方がマスターできるはずです。

 

 

1.try文とは

プログラム処理中にエラーを検出した場合、あらかじめ用意しておいた処理を行い、プログラム全体の処理を止めずに継続することができます。この処理のことを例外処理ともいいます。(エラー≒例外)

メリットとしては、Pythonは、プログラム実行中にエラーが発生すると異常終了してしまうので、エラーであっても適切に処理し、正常に終了させることができます。

 

 

・例外って何

この記事にたびたび登場する例外ですが、前述にもあるとおり、エラーと同じ意味として扱います。

プログラミングが本職の方のなかには、明確に定義されている場合もあると思いますが、ググってみた感じエラーと例外の境界線もあいまいで、個人や企業さんなどの文化によって解釈もまちまちなです。

なので、この記事で定義を語ることをスルーします。

 

ただ、例外の種類は様々あり、例外のケースごとで処理を分けることになるので、種類については代表的なものを紹介しておきます。

 

例外の種類説明
SyntaxError構文エラー。文法としての間違っている。
IndentationErrorif文などのインデントが正しくない。
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スクレイピングのネタを中心にブログを更新していきます。

また、足を運んでいただけると喜びます。

 

ご清聴ありがとうございました。