AI資格ドリル
資格を選ぶ↓

用語比較

try文のelse節とfinally節の違い|実行される条件と例外の扱い(Python3基礎)

try文のelse節とfinally節は、どちらも「後ろに書く節」なので、例外が出なかったときに動く節だと混同しやすい組です。実際には、else節は例外が出なかったときだけ、finally節は例外の有無にかかわらず動きます。

elseは「例外が出なかったときだけ」、finallyは「出ても出なくても必ず」。例外が出ると else は飛ばされ、finally は動くと覚えると、出力順を問う問題を切り分けられます。

このページは、Python公式チュートリアル「8. エラーと例外」の記述と、Python 3.9.6での実行結果をもとに比べます。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。

結論

else節

try節で全く例外が送出されなかったときに実行される。すべてのexcept節より後ろに置く。

finally節

try文が例外を発生させるか否かに関わらず実行される。後片付けの動作を書く。

出力順

例外なしは try→else→finally、例外ありは try→except→finally。例外ありではelseは実行されない。

違いを表で確認

比較軸else節finally節
実行される条件else:try節で例外が送出されなかったときだけ実行されるfinally:例外が出ても出なくても実行される
例外が出たとき(exceptで処理した場合)else:実行されない。try→except→finally の順になるfinally:最後に実行される
exceptで処理されない例外else:実行されないfinally:実行されたあとに、その例外が再送出される
節の役割else:成功後に続けるコードを置く。ここで起きた例外は、同じtry文のexcept節では捕捉されないfinally:ファイルなどの外部リソースの解放のような、後片付けの動作を置く
returnとの関係else:try節の中のreturnに達すると、else節は実行されないfinally:try節のreturnの直前に実行される。finally節にreturnを書くとその値が返る(推奨されない)

Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)

試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

出力順を答える問題で、例外が出る場合の else の扱いに迷う人

例外が出ると else は実行されません。try→except→finally の順です。

02

ファイルなどを、成功しても失敗しても閉じたい人

どちらの場合も動くのは finally です。公式チュートリアルも、finally は外部リソースを解放するのに便利だと述べます。

03

try節には失敗しうる処理だけを書き、成功後の処理を分けたい人

成功後の処理は else に書きます。公式チュートリアルは、追加のコードは try 節より else 節に置くほうがよいと述べます。

具体例で使い分ける

例 1

例外が出る場合と出ない場合の出力順

10 // n を try 節に書き、ZeroDivisionError を except 節で処理して、else 節と finally 節でそれぞれ印を残します。

  • n=2 のときは例外が出ないので、['try', 'else', 'finally'] の順に動きます。
  • n=0 のときは ZeroDivisionError が出るので、['try', 'except', 'finally'] の順になり、else は動きません。

結論: finally はどちらの場合も最後に動き、else は例外が出ない場合だけ動きます。

例 2

exceptで処理されない例外が出る場合

1 / "a" で TypeError が出ますが、except は ValueError しか処理しない場合です。

  • TypeError は except 節に一致しないので、そのまま外へ伝わる流れになります。
  • Python 3.9.6で確かめると、先に finally 節が実行され、そのあとで TypeError が再送出されました。

結論: 処理されない例外でも、finally は先に実行されます。

例 3

try節の中で return する場合と、else節で例外が出る場合

try 節で return "try" を実行する関数と、else 節で int("x") を実行する場合を調べます。

  • try 節が return に達すると、その直前に finally 節が実行されます。実際に finally の print が先に出て、戻り値は "try" でした。
  • else 節で int("x") が ValueError になった場合、同じ try 文に except ValueError があっても捕捉されず、finally 実行後に ValueError が外へ伝わりました。

結論: return の前にも finally は動きます。else の中の例外は、同じ try 文の except では処理されません。

問題文から答えを選ぶ手順

  1. 1

    例外が出たかを見る

    出ていなければ else が動きます。出ていれば else は飛ばされます。

  2. 2

    except に一致するかを見る

    一致すればその except が動き、一致しなければ finally のあとに例外が再送出されます。

  3. 3

    finally を最後に足す

    どの経路でも finally は動きます。try 節が return・break・continue に達した場合も、その直前に動きます。

試験での見分け方

  • 1else節は、try節で例外が送出されなかったときだけ実行される。
  • 2finally節は、例外の有無にかかわらず実行される。
  • 3例外が出た場合は else を飛ばし、except(一致した場合)→ finally の順になる。
  • 4exceptで処理されなかった例外は、finallyの実行後に再送出される。

誤答しやすい選択肢

例外が出たときも else が動くと考える

修正: else は例外が出なかったときだけです。例外が出ると try→except→finally になります。

finally は例外が出たときだけ動くと考える

修正: finally は例外が出なくても動きます。例外なしの流れは try→else→finally です。

else節の中の例外が同じtry文のexceptで捕捉されると考える

修正: else 節の中の例外は、同じ try 文の except 節では処理されません。

確認問題

Q1例外が出ない場合、try→else→finally の順に動きますか?

答え: 動く

else は例外なしのときに、finally は常に実行されます。

Q2except で処理した場合、else は実行されますか?

答え: 実行されない

else は try 節で例外が送出されなかったときだけ実行されます。

Q3except に一致しない例外が出た場合、finally は実行されますか?

答え: 実行され、そのあとで例外が再送出される

処理されなかった例外は、finally 節の実行後に再送出されます。

到達チェック

  • else が動くのは例外が出ないときだけだと言える
  • finally は例外の有無にかかわらず動くと言える
  • 例外ありの出力順が try→except→finally だと言える

同じ資格で次に知りたいこと

よくある質問

Qtry文のelse節とfinally節の違いは?

A

else節は、try節で例外が送出されなかったときだけ実行されます。finally節は、例外が出ても出なくても実行されます。

Q例外が出たとき、else節は実行されますか?

A

実行されません。except節で処理した場合は、try→except→finally の順になります。

Qfinally節はいつ使いますか?

A

ファイルなどの外部リソースを、成功したかどうかにかかわらず解放したいときに使います。公式チュートリアルも、この用途で便利だと述べます。

次に見る比較

執筆: ミナト編集部(運営者情報を見る)