Re:ゼロから始める文系プログラマ

未経験がプログラミングを通して人生を変える

【Python・例外処理】~エラーの出力②~


スポンサードリンク
 

f:id:ShotaNukumizu_1000:20210405111435p:plain

おはようございます!Shotaです。今日も早速、Pythonに関する記事を書いていきます。

今日は昨日の記事で紹介した「try-except構文」の具体的な書き方をコードとともに解説していきます。

 

【目次】

 

try-except構文

exceptだけを使用した処理

 exceptには、ペアとなっているtryで発生した例外を処理します。例外が発生しなければ、except文に書かれている処理はスキップされます。ところが、try実行中にexceptで指定したエラー名と一致する例外が発生すると、except文が実行されてそれ以降に記述された処理も実行されます。

 

実際に以下のコードを書いて試してみましょう。 

 

try:
    sample()
except:
    print('except内の処理')

 

▼実行結果

except内の処理

 

上のコードでは、try文でsample()という関数を呼び出しています。ところが、sample()関数は定義されていないので実行できません。ここで例外が発生します。 

try文の実行中に例外が発生すると、except文が実行されます。例外が発生しなければ、exceptブロックは実行されません。

 

try:
    print('HELLO')
except:
    print('except内の処理')

 

▼実行結果

HELLO

 

上のコードを参照してみると、try文でprint関数を実行して文字列を表示する処理を書いています。この際、try文には例外を起こす処理が一つも書かれていないのでexcept文が実行されません。

押さえておきたいことは、try文で例外が発生しない場合、except文の処理が実行されないということです。

 

finallyを使う時の処理

 finallyは例外の有無に関わらず、常に実行されます。

例えば、何らかのリソースを開放する処理など、tryブロックでどんな処理をしたにせよ、finallyには最後には必ずチェックしておきたい処理を書きます。

 

#tryで例外が発生しないとき
try:
    print('HELLO')
except:
    print('except内の処理')
finally:
    print('処理が終了しました')

 

 ▼実行結果

HELLO
処理が終了しました

 

上のコードで考えてみましょう。

tryで例外が発生しない場合、tryやfinally両方に書かれている処理を実行します。 このコードで考えると、tryで例外が発生しないので(tryもfinallyもprint関数で文字列を表示しているだけ)、tryで発生した処理もfinallyのものも両方ともコマンドプロンプトに出力されるのです。

 

#tryで例外が発生する時
try:
    pros()
except:
    print('except内の処理')
finally:
    print('処理が終了しました')

 

 ▼実行結果

except内の処理
処理が終了しました

 

 try文の例外の有無に関わらず、finallyの処理は必ず実行されます。上のコードの場合、prosという関数を呼び出していますが、そのような名前の関数は存在しないのでtry文で例外が発生しています。

 その際、except文にかかれている処理を実行して結果をコマンドプロンプトに出力します。実行結果にもある通り、finallyのprint関数の処理も行われていることがわかります。

つまり、tryで例外が発生した場合はexceptとfinallyの処理が両方とも行われます。 

 

まとめ

【本日のまとめ】

  • try-except構文では、tryに例外が発生する処理を書いて、exceptに例外が発生した場合の処理を書く。tryで例外が発生しなかった場合はexceptの処理は実行されない
  • finally文の処理は、try文の例外の処理の有無に関わらず行われる。例えば、tryで例外が発生した場合はtry文とfinally文両方とも処理される。

 

 

本ブログでは、こんな感じでPythonにまつわる情報や基本的な知識、Pythonの操作方法やニュースをたくさん紹介していきます。毎週日曜日に、普段とは趣向を変えて有名な自己啓発本・ビジネス書を要約・考察するブログを書いていきます。

この記事がいいと思った人はSNSにシェアしてくれると非常に嬉しいです!

明日は実際の使い方をコード上で検証していこうと思います。

今日も最後まで読んでくださりありがとうございました!

 

【参考サイト】

www.sejuku.net

 

python.keicode.com