【Python】 try – exceptによる例外処理の基本

Python フロー制御

プログラム実行中に検出されたエラーのことを「例外(Exception)」と呼んでいます。
例外によりプログラムが意図せず終了してしまうことを避けるために、例外処理を適切に実装する必要があります。
Pythonでは、try – except構文を使うことで例外を処理することが出来ます。
本記事では、この構文の使い方の基本についてわかりやすくまとめます。

エラーと例外

一般的にエラーと例外の違いについては明確な定義は無いようですが、
Python公式リファレンス 8.エラーと例外
にこれについて記述があります。概要をまとめると、以下のような感じです。

try – except文の基本的な使い方

基本的な構文は以下に示す通り、try文とexcept節の組み合わせになります。

try:
    # 処理1

except #例外型 :
    # 処理2
	
# 次の処理

処理のフローを下図に示します。
まずはtry文が実行され、そこで例外が発生するかどうかで処理が分岐されます。except節には想定しうる例外処理を記述します。
尚、ここに記述しなかった例外が発生した場合は、エラーメッセージとともにプログラムは停止します。

try-exception flow

以下の例は、入力した数値が整数であればそのまま出力、整数でない場合は再度入力を促す動作をするシンプルなコードです。

while True:
     try:                                           
         n = int(input())
		 
     except ValueError:                             
         print('enter again')
		 
     except KeyboardInterrupt:                      
         print('end')
         break
		 
     else:                                          
         print('number {}'.format(n))
         break

このコードから分かることは、

  • ひとつのtryに対しexcept節を複数付けてそれぞれ個別の例外処理が可能。
  • else節を設けることも可能。以下の特徴があります。
    • tryで例外が全く送出されなかった場合に実行される
    • 全てのexcept節の後ろに置かれる

実行結果を以下に示します。

$ python3 try_except.py
a
Enter again     # ValueError送出による例外処理
3.14
Enter again     # ValueError送出による例外処理 
3
number 3        # Try節で例外が送出されなかったのでelse節が実行

$ python3 try_except.py
^CEnd     # KeyboardInterrupt送出による例外処理

まとめ

今回は、try-except構文を用いた例外処理の基本についてまとめました。
フォルダが存在するかどうかをチェックしたり、スクレイピングなどでWebサイトの応答をチェックする場合など良く使う処理だと思います。

Learn more...

書籍でもう少し詳しく学びたい場合はこちらもどうぞ。筆者もかなり参考にさせてもらっています!

シェアする
ひびきをフォローする
Hbk project

コメント

  1. […] 例えば下記のように、try-except文 を使って指定のディレクトリが既に存在する場合は例外を発生させて、別の処理に誘導するコードも考えられます。 […]