「エラーが出ると処理が止まるけど、何かいい方法はないのかな。」
上記の疑問にお答えします。
try-except文を使えば、エラーが発生しても適切に処理することができます。
この記事では、Pythonでtry-except文を使いたいけど、よく分からないという人に向けて、次のことを解説しています。
- try-except文とは
- try-except文の書き方
「偉そうに語るおまえは誰やねん。」と思われるので、私のことも少し紹介させてください。
たいらーのプロフィール
- 文系四大出身。ソフトウェア開発の経験はなしですが、IT業界に身を置いています。
- 開発者やユーザーとのパイプ役など、業務にプログラミングスキルを活かす。
- Pythonは独学で習得。スクレイピングや作業の自動化などに勤しんでいます。
Pythonを学習しはじめのときは、自分の組んだプログラムがエラーを吐いて、冷や汗をかくことがあると思いますが、この記事を読めば、エラーを考慮したプログラミングができるようになります。
初心者の方でも分かるように努めて解説していますので、try-except文の基礎的な使い方をマスターして、ご自身のプログラミングに活用してください。
1.try-except文とは
try-except文とは、例外処理を実装するための構文です。
プログラム処理中にエラーを検出した場合、そのエラーに応じて実行される処理のことを例外処理と言います。
あらかじめ、起こりうるエラー想定し、どのように処理をするか決めておくことで、プログラム全体の処理を止めずに継続することができます。
エラーが発生しても適切に処理し、正常に終了させることができるので、つくる側だけでなく使う側も安心して使用できるようになります。
・例外って何
この記事にもたびたび登場する例外ですが、エラーと同じ意味と考えてOKです。
この記事内では、「例外=エラー」として扱います。
開発をやっておられるプロの方の中には、明確に定義している方もいると思いますが、調べた感じだとエラーと例外の境界線はあいまいで、個人や企業などによって解釈もまちまちです。
なので、この記事で定義を語ることはスルーします。
例外の種類は様々あるので、種類については代表的なものを紹介しておきます。
実際は、例外の種類によってtry-except文内の処理を分けることになります。
例外の種類 | 説明 |
---|---|
IndentationError | if文などのインデントが正しくない。 |
TypeError | データ型の間違い。演算や組み込み関数の処理で、不適切な型が使われた。 |
IndexError | リストなどに格納された値を、indexで取得する際に範囲外の位置(要素数)を指定した。 |
ValueError | 型は合っているが、不適切な値が使われた。 |
SyntaxError | 構文エラー。文法としての間違っている。 |
KeyError | 辞書(dict型)の値をキーを指定して取得する際に、存在しないキーを指定した。 |
AttributeError | 属性参照に関するエラー。プログラム上で存在しない(定義されていない)属性を参照しようとした場合など。 |
IndentationErrorやSyntaxErrorは、そもそもプログラムとしてよろしくないので、例外として処理するのではなく、事前に自分が書いたコードをチェックするべきです。
2.try-except文の書き方
try-except文の基本的な構文と、覚えておくと便利な構文をいくつか紹介します。
・基本的な書き方(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("入力した値は正しいですか?")
また、「except 例外の種類 as 変数名 :」とすると、エラーメッセージなどが格納された例外オブジェクトを変数に格納して使用することができます。
print("ひとつめの数字を入力してください") x = input() #たとえば"a"などの文字を入力するとエラーになります。 print("ふたつめの数字を入力してください") y = input() try: goukei = int(x) + int(y) #変数xとyをint型に変換し加算 except ValueError as error: #例外オブジェクトをerror変数に格納 print(error)
ちなみに、「except :」とすると、すべての例外を捕捉しますが、どんなエラーが発生しているのか見えないので、不具合やトラブルの原因になりかねません。あまりおすすめはしません。
print("ひとつめの数字を入力してください") x = input() #たとえば"a"などの文字を入力するとエラーになります。 print("ふたつめの数字を入力してください") y = input() try: goukei = int(x) + int(y) #変数xとyをint型に変換し加算 except : #すべての例外を捕捉 print("入力した値は正しいですか?")
・正常時の処理を書く(else)
例外が発生しなかった場合に処理する内容を記述する場合、elseを使用します。
前出のサンプルコードに追記します。
print("ひとつめの数字を入力してください") x = input() #たとえば"a"などの文字を入力するとエラーになります。 print("ふたつめの数字を入力してください") y = input() try: goukei = int(x) + int(y) #変数xとyをint型に変換し加算 except ValueError: #数値計算には不適切なためエラー print("入力した値は正しいですか?") else: print(goukei) #正常処理として加算した値を表示
・例外を無視する(pass)
基本的にtry-except文では例外が発生したときの処理を記述する必要がありますが、何もさせたくないときはpassを使用します。
構文として記述が必要だが、何も実行させる必要がない場合に有効です。
print("ひとつめの数字を入力してください") x = input() #たとえば"a"などの文字を入力するとエラーになります。 print("ふたつめの数字を入力してください") y = input() try: goukei = int(x) + int(y) #変数xとyをint型に変換し加算 except ValueError: #数値計算には不適切なためエラー pass #入力値に文字を入力しても、何もせずプログラムが終了 else: print(goukei) #正常処理として加算した値を表示
・最後に必ず処理を実行させる(finally)
例外、正常処理を問わず必ず最後に実行させたい処理がある場合は、finallyを使用します。
使い方は以下のとおりです。
print("ひとつめの数字を入力してください") x = input() #たとえば"a"などの文字を入力するとエラーになります。 print("ふたつめの数字を入力してください") y = input() try: goukei = int(x) + int(y) #変数xとyをint型に変換し加算 except ValueError: #数値計算には不適切なためエラー print("入力した値は正しいですか?") else: print(goukei) finally: print("処理が終了しました") #例外処理、正常処理のどちらが終了しても表示
・まとめ
以上、try-except文の基本的な使い方を解説しました。
例外処理を正しく理解することができれば、ユーザーにやさしいものづくりができます。
try-except文を活用して、エラーにうまく対応したソースコードが書けるようになりましょう。
Pythonをどのように学び進めればよいか、お悩みの方は『Pythonの独学ロードマップ【独学方法の経験談有り】』をご覧ください。
私個人がPythonを独学で身につけたロードマップについて解説しています。
ご清聴ありがとうございました。